2016-04-21 83 views
0

我正在使用.serializeArray函數來收集表單的所有輸入,但我想排除特定div類中的輸入。我認爲.not()選擇器會做到這一點,但它似乎沒有工作。jQuery SerializeArray和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'然後'b'。

小提琴: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

好了使用上的投入不div的這個類,它會工作。

' 


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

'

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

JSFidle

+0

我試圖通過將「excludeMe」類移到輸入上,它也沒有工作。 – 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的代碼沒有區別..您應該在':not'之前添加'input'以使其工作爲它應該 –

+0

你需要添加後的輸入:不像@lipp建議 – Nate23VT

+0

@MateiMihai - 有一個區別我添加了'class =「excludeMe」'輸入。因爲'「not(.excludeMe)」'將排除具有類「excludeMe」類的表單項我已將它添加到輸入。在「:」之後輸入''也不是強制性的。查看[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/