0

我正在使用 .serializeArray 函数来收集表单的所有输入,但我想排除某个 div 类中的输入。我认为 .not() 选择器会这样做,但它似乎不起作用。

在最基本的层面上是我的代码:

HTML:

<form class="theForm">
  <input name="a" value="a"/>
  <div class="excludeMe">
    <input name="c" value="c"/>
  </div>
</form>

Javascript:

$.each($(".theForm").not(".excludeMe").serializeArray(), 
function() {
    alert(this.name);
});

我希望警报只是“a”,但这是警报“a”然后是“b”。

小提琴:https ://jsfiddle.net/cysaczu5/

4

5 回答 5

1

您必须将所有输入包装在<div><input/></div>

然后将选择器更改为此$.each($(".theForm :not(.excludeMe) input")

https://jsfiddle.net/cysaczu5/3/

我建议删除 div 并将“excludeMe”类直接添加到输入中。然后选择器变成$.each($(".theForm input:not(.excludeMe)")

于 2016-04-21T12:33:44.927 回答
0

好吧,在输入而不是 div 上使用这个类,它会起作用。

'


 $.each($("input").not(".excludeMe").serializeArray(), 
   function() {
    alert(this.name);
});

'

<input name="c" class='excludeMe' value="c"/>

JS文件

于 2016-04-21T12:31:35.520 回答
0

请试试

<form class="theForm">
<input name="a" value="a"/>
<div class="excludeMe">
  <input class="excludeMe" name="c" value="c"/>
</div>
</form>
$.each($(".theForm :not(.excludeMe)").serializeArray(), 
function() {
    alert(this.name);
});
于 2016-04-21T12:35:41.063 回答
0

最简单的答案是name从要跳过的输入中删除属性。这样它也被跳过serializeArray()

HTML:

<form class="theForm">
  <input name="a" value="a" />
  <input value="c" />
</form>

JS:

$.each($(".theForm").serializeArray(), function() {
    alert(this.name);
});
于 2016-04-21T12:38:19.290 回答
0

只需将inputbefore:not语句仅匹配表单内的输入,而不是表单本身:

$.each($(".theForm input:not(.excludeMe)").serializeArray(), function() {
    alert(this.name);
});

https://jsfiddle.net/cysaczu5/5/

于 2016-04-21T12:40:27.680 回答