【问题标题】:jquery how to select form elements in sub-form divjquery如何在子表单div中选择表单元素
【发布时间】:2012-06-28 16:02:30
【问题描述】:

假设我有以下表格:

​<form id="f">
    <input name="a"/>
    <input name="b"/>
    <div id="sub_part">
        <input name="c"/>
        <input name="d"/>
    </div>
</form>
<form id="e">
    <input name="a"/>
    <input name="b"/>
    <div id="sub_part2">
        <input name="c"/>
        <input name="d"/>
    </div>
</form>

我通常可以使用.serialize() 获取所有名称-> 值对。例如。我知道我可以通过以下方式从f 表格中获取信息:

$('form#f').serialize();

如果只想要sub_part div 中f 形式的名称-> 值对怎么办?在这种情况下,jquery 选择器会是什么?对于本练习,我不想更改 html 的结构。

请查看我列出问题的这个小提琴:http://jsfiddle.net/gu9XB/4/

注意我尝试选择子表单的方式不起作用。

【问题讨论】:

  • 当 jQuery 文档说 .serialize()“在表示一组表单元素的 jQuery 对象上操作”时,它令人困惑。它没有,唯一官方支持的元素(作为容器)是form。也许他们会修复文档。见相关bug report

标签: javascript jquery forms selector subform


【解决方案1】:

只需序列化 div 内的输入。您还使用了 .sub_part 所以它没有选择 div。如果已经有 ID,您可以通过 id 选择以使其更快

('#sub_part input').serialize();

这是一个有效的小提琴http://jsfiddle.net/gu9XB/21/

【讨论】:

    【解决方案2】:

    使用这个:

    $('#but1').click(function() {
        var data = $('form#f').serialize();
        alert(data);
    });
    
    $('#but2').click(function() {
        var data = $('#f #sub_part *').serialize();
        alert(data);
    });​
    

    这里是DEMO

    【讨论】:

    • 为什么在已经给出 ID 并且速度更快的情况下使用“表单”选择器?还使用#f #sub_part?您可以只使用 ID '#sub_part',这是选择元素的最快方式
    【解决方案3】:

    使用以下代码 它会在你的情况下工作

     $('#f #sub_part input').serialize();
    

    【讨论】:

    【解决方案4】:

    如其他答案所述,serialize() 方法不适用于 div。解决这个问题的一种方法是创建一个 jQuery 对象,它将处理并将您选择的元素附加到此:

    var data = $('<form>').append($('form#f .sub_part')).serialize();
    

    【讨论】:

      【解决方案5】:

      使用这个 CSS 选择器

      $('#e > div')
      

      这将选择sub_part div。匹配发生是因为它是表单元素的直接子元素。如果sub_part中有嵌套的div,则不会受到影响。

      您还有一个带有 sub_part 的重复 ID。您应该将 id 更改为一个类或更改其中一个 id 的名称。

      http://jsfiddle.net/dceast/gu9XB/15/

      【讨论】:

      • 此方法在 jsfiddle 示例中对我不起作用。如果您认为它有效,请使用我提供的 jsfiddle 发布一个有效的示例。
      • 您应该在表单、输入、文本区域上进行序列化,或者选择不是子 div,因此您需要将其拆分。 jsfiddle.net/dceast/gu9XB/15
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多