2014-01-19 55 views
2

從來沒有問過問題,因爲我通常可以在這裏找到答案,但是這讓我很難過。我不會假裝是任何JS/JQ專家,但我對兩者都非常熟悉。我想要做的是將一個預定義的CSS類設置爲一個表單內的一組文本輸入元素(我使用的Django版本不幸無法爲我做到這一點,它目前不能爲我升級爲我沒有時間):

function setBsCss() { 
var fields = $("input[type='text'], textarea").serializeArray(); 
jQuery.each(fields, function(i, field){ 
    if ((this.name != "csrfmiddlewaretoken") && (this.name.indexOf("recaptcha") == -1)) { 
     $(this).addClass('someclass'); 
    } 
}); 

}

我沒有得到任何錯誤,但是類根本就沒有被添加到的元素。我可以更改代碼並只使用名稱或ID選擇器,但如果可能的話,我寧願將類應用於對象本身。

任何幫助非常感謝!

+1

你想添加類到dom元素,但使用serializeArray()使字段數組而不是jq對象選擇器。 –

回答

3

我可以確認行爲,但我不明白。

爲了解決這個問題,就能避免jQuery對象轉換成一個數組,只需使用.each(),而不是jQuery.each()

$("input[type='text'], textarea").each(function (i, field) { 
    if ((this.name != "csrfmiddlewaretoken") && (this.name.indexOf("recaptcha") == -1)) { 
     $(this).addClass('someclass'); 
    } 
}); 

查看全部JSFiddle

更新:

問題所在在.serializeArray()

.serializeArray()
描述:編碼集合形式的元素作爲名稱和值的數組。
.serializeArray()方法創建一個JavaScript對象數組,準備編碼爲JSON字符串。

serializeArray()確實創建DOM元素的數組,但只有name/value對的陣列。所以,this指物體

{ 
    name: "other", 
    value: "somevalue" 
} 

預期不循規蹈矩,與addClass()使用時。

+0

現在似乎很簡單!你是絕對正確的。非常感謝你的澄清,讓它工作:) –