实时绑定提交不指向chrome中的元素

时间:2012-09-04 16:22:01

标签: javascript javascript-events submit jquery

运行以下代码,我希望看到相关的表单,所以我可以从中提取信息。相反,this指向文档。

我认为它与使用实时绑定有关,是否有解决方法?

 $('.form_one').add('.form_two').live('submit',function(e){
      e.preventDefault();
      console.log($(this));
    })

2 个答案:

答案 0 :(得分:1)

这是因为live()是将事件处理程序委托给最高级别DOM元素的快捷方式 - document - 这就是this范围指向那里的原因。

作为一种解决方法,您应该使用$(e.target)来获取引发事件的元素。

此外,live()已被弃用,如果您使用的是jQuery 1.7 +,则应使用delegate()on()

Example fiddle

答案 1 :(得分:0)

http://jsfiddle.net/ZBaWd/将演示如何使用on处理程序。

<div id="container"></div>​

var cont = $("#container");

// Note that I'm attaching it to container and not the forms themselves. 
// Then, as an additional parameter, I provide the selector "form" so that
// `on` is only fired for "form" elements that "submit" and are children of "#container"
$("#container").on("submit", "form", function(e){
    e.preventDefault();
    console.log($(this));
});


$("<form>").addClass("form_one").append("<button type='submit'>Submit 1</button>").appendTo(cont);
$("<form>").addClass("form_two").append("<button type='submit'>Submit 2</button>").appendTo(cont);