2011-09-27 56 views
1

這是我的例子:jQuery對象和form.serialize

var form= $(".anyclass form"); 
var sf = form.serialize(); 
$.post(form[0].action, 

讓我們假設只有一個在符合標準的頁面形式。

爲什麼我需要使用[0]訪問操作屬性? 爲什麼.serialize()沒有[0]

對不起,這個新手問題。

回答

3

我認爲你要做到這一點,如:

$.post(form.attr('action')); 

順便說一下:您正在使用.anyclass類獲取元素中的所有表單。這將返回多個表單(如果存在)。如果你給了表單一些id並且這樣做:$('#myForm'),你會更好。

+0

lol,我喜歡*指出底層問題*的答案。 – rlemon

2

您的form$(...)返回的變量是一個jQuery對象,可能包含對許多表單元素的引用。

要訪問內的基礎原生DOM元素該對象,您需要使用數組符號(如上)或form.get(0)

至於使用上的差異,.serialize()是jQuery對象的一種方法,所以必須在form上調用。

然而.action是一個DOM屬性,所以你需要使用本機的DOM元素來訪問它,儘管你可以或者已經使用:

form.attr('action') 
1

的[0]只是給你的直DOM對象形式

形式=== jQuery對象
形式[0] === DOM對象

1

這是因爲.serialize()是一個適用於所有匹配元素的jQuery方法。

我沒有看過的來源,但我敢打賭,有這樣的事情:

return this.each(function(i, val){ 
    // do stuff 
}) 

當你這樣做form[0].action,你實際上返回的第一個元素(本地DOM元素)設置匹配的元素,然後訪問它的本地屬性