在html页面中假设一个id为“serialform”的表单。
以下JavaScript按预期工作。
$( "#serialform" ).submit(function( event ) {
var action = $( "#serialform" ).attr("action");
var serial = $("#serial").val()
...
return event.preventDefault();
});
但是,如果我替换函数的第一行使用“this”:
$( "#serialform" ).submit(function( event ) {
var action = this.attr("action");
var serial = $("#serial").val()
...
return event.preventDefault();
});
然后表单提交而不是简单地返回action属性。 this
指的是表单元素(根据firebug)。
我原以为this
等同于$( "#serialform" )
。无论如何,我想获取正在提交的表单的action属性。
我正在使用jQuery 2.0.3。
答案 0 :(得分:5)
this
是对DOM节点的引用,而不是对包装的jQuery节点的引用。此DOM节点未实现.attr
方法,因此会引发错误。
在调用jQuery方法之前,需要将DOM节点包装在jQuery对象中,如下所示:$(this).attr('action')
。
答案 1 :(得分:3)
它提交是因为this.attr
引发了错误(类似于“对象无论什么方法'attr'),然后进一步的代码没有运行,并且没有阻止默认行为。检查你的控制台。
在jQuery事件处理程序中,this
是触发事件的DOM元素(在本例中为表单)。它不是jQuery对象,因此它没有attr
方法。