代码之家  ›  专栏  ›  技术社区  ›  dreftymac

是否有自动将表单元素映射到JSON的javascript(首选jquery)库?

  •  1
  • dreftymac  · 技术社区  · 15 年前

    背景: 这是我在JSON被称为JSON之前就一直在寻找的东西。

    假设您的代码中有以下javascript变量:

    jsonroot = 
    {
        'fname':'valued'
        ,'lname':'customer'
        ,faves:['berry','chocolate','mint']
        ,actors:[
            {'fname':'brad','lname':'pitt'}
            ,{'fname':'mike','lname':'hammer'}
        ]
    };
    

    您可以很容易地看到这个映射到JSON的方式,它是1:1的对应关系。

    问题: 有没有一个库可以接受这种1:1的通信并将其传递到HTML表单元素?例如,我想在表单元素中执行如下操作:

    <input type="text" mapping="jsonroot['fname']" id="fname"></input>
    <input type="text" mapping="jsonroot['lname']" id="lname"></input>
    
    <legend>
        <fieldset>Favorite Flavors</fieldset>
        <input type="text" mapping="jsonroot['faves'][0]" id="fave_0"></input>
        <input type="text" mapping="jsonroot['faves'][1]" id="fave_1"></input>
        <input type="text" mapping="jsonroot['faves'][2]" id="fave_2"></input>
    </legend>
    
    <legend>
        <fieldset>Favorite Actors</fieldset>
        <input type="text" mapping="jsonroot['actors'][0]['fname']" id="fave_0_fname"></input>
        <input type="text" mapping="jsonroot['actors'][0]['lname']" id="fave_0_lname"></input>
    
        <input type="text" mapping="jsonroot['actors'][1]['fname']" id="fave_1_fname"></input>
        <input type="text" mapping="jsonroot['actors'][1]['lname']" id="fave_1_lname"></input>
    </legend>
    

    理论基础: 有时,我不想通过POST或GET提交表单变量,而是想将它们传递到一个javascript变量中,然后对该变量进行一些操作,然后将其发送到某个地方。

    编写HTML表单<->JSON翻译非常繁琐。我不是唯一一个想这样做的人,所以有没有一个图书馆可以自动处理这个问题?

    1 回复  |  直到 15 年前
        1
  •  2
  •   cletus    15 年前

    使用类似的东西 Mark Gibson's JSON JQuery plugin . 它补充说 $.toJSON() $.parseJSON() 方法。结合将窗体序列化为对象(如 Serialize Form to JSON :

    $.fn.serializeObject = function()
    {
       var o = {};
       var a = this.serializeArray();
       $.each(a, function() {
           if (o[this.name]) {
               if (!o[this.name].push) {
                   o[this.name] = [o[this.name]];
               }
               o[this.name].push(this.value || '');
           } else {
               o[this.name] = this.value || '';
           }
       });
       return o;
    };