以下是我的例子:
var form= $(".anyclass form");
var sf = form.serialize();
$.post(form[0].action,
让我们假设页面中只有一个符合条件的表单。
为什么我需要使用[0]
访问action属性?
为什么.serialize()
没有[0]
?
抱歉这个新手问题。
答案 0 :(得分:3)
我想你想这样做:
$.post(form.attr('action'));
顺便说一下:你正在使用类.anyclass获取元素中的所有表单。这将返回多个表单(如果存在)。如果你给表单一些id,那就更好了:$('#myForm')。
答案 1 :(得分:2)
从form
返回的$(...)
变量是一个jQuery对象,可能包含对许多表单元素的引用。
要访问该对象中的基础本机DOM元素,您需要使用数组表示法(如上所述)或form.get(0)
。
至于使用上的差异,.serialize()
是jQuery对象的一个方法,因此必须在form
上调用。
但是.action
是一个DOM属性,因此您需要使用本机DOM元素来访问它,尽管您可以使用它:
form.attr('action')
答案 2 :(得分:1)
[0]只为你提供表格的直接DOM对象,
form === jquery object
form [0] === DOM对象
答案 3 :(得分:1)
那是因为.serialize()是一个适用于所有匹配元素的jQuery方法。
我没看过消息来源,但我打赌有类似的东西:
return this.each(function(i, val){
// do stuff
})
当你执行form[0].action
时,你实际上是在匹配元素集中返回第一个元素(本机DOM元素),然后访问它的本机属性