2016-04-21 1 views
0

Я использую функцию .serializeArray для сбора всех входов формы, но я хочу исключить входы в пределах определенного класса div. Я думал, что селектор .not() сделает это, но он, похоже, не работает.jQuery SerializeArray и Not selector

На самом базовом уровне, здесь мой код:

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», а затем «b».

Fiddle: https://jsfiddle.net/cysaczu5/

ответ

1

Вы должны обернуть все входы в <div><input/></div>

А затем измените селектор этого $.each($(".theForm :not(.excludeMe) input")

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

Я бы рекомендовал удалить div и добавить класс «excludeMe» к входам напрямую. Затем селектор становится $.each($(".theForm input:not(.excludeMe)")

+0

Это сработало - спасибо. Я попробовал решение: not(), но мне не было места после .theForm – Nate23VT

0

Ну использовать этот класс на входы не дивы, и она будет работать.

' 


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

'

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

JSFidle

+0

Я пробовал это, переместив класс «excludeMe» на Input, и он тоже не работал. – Nate23VT

+0

Посмотрите на пример в JSFiddle, он отлично работает :) Также вы должны закодировать все входы, а не селектор классов. –

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); 
}); 
+0

Нет никакой разницы между вашим кодом и OP. Вы должны добавить 'input' перед': not', чтобы заставить его работать как он должен –

+0

Вам нужно добавить ввод после: не как @lipp предложил – Nate23VT

+0

@MateiMihai - Есть разница, которую я добавил в класс 'class =" excludeMe "'.Поскольку '' not (.excludeMe) "' будет исключать элементы формы, имеющие класс '" excludeMe ", я добавил его для ввода. Также '' ввод после: not "' не является обязательным. Просмотреть [JSfiddle] (https://jsfiddle.net/1ouc79nm/3/) –

0

Самый простой ответ был бы удалить атрибут name из входов, которые вы хотите, чтобы пропустить. Таким образом, она также пропускается serializeArray():

HTML:

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

JS:

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

Проще говоря input перед тем :not заявление, чтобы соответствовать только входы внутри формы, а не сама форма :

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

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