jquery函数适用于live,而不是on

时间:2012-01-19 14:43:01

标签: javascript jquery

尝试使用首选on方法调用,但代码不能与 on 一起使用,但可以使用 live 方法。

好的,我有一个简单的按钮元素。

<button id="EditVal" name="EditVal" style="btn" value="Edit Debt">Edit Debt </button>

如果我使用live方法,则此代码有效:

$("#EditVal").live("click", function(e){
    alert('Edit this Val');
})

但这不是

$("#EditVal").on("click", function(e){
    alert('Edit this Val');
})

我做错了什么?

4 个答案:

答案 0 :(得分:9)

您使用的是on() bind(),而不是live()。要像live()一样使用它,你应该写:

$(document).on("click", "#EditVal", function(e) {
    alert('Edit this Val');
});

请注意,出于性能原因,我们最好在非动态祖先元素而不是on()上调用document,即使用delegate()代替live() }。

答案 1 :(得分:4)

在页面加载时附加事件时使用on。在动态加载内容时,您需要像on一样使用delegate,方法是将处理程序放在父元素上,然后传递过滤选择器。

试试这个:

$("#ParentOfEditVal").on("click", "#EditVal", function(e){
    alert('Edit this Val');
})

答案 2 :(得分:3)

如果您在页面上动态删除html元素,那么您需要实时。这就是为什么如果EditVal在页面加载中存在则on设置为在EditVal上工作的原因。因为它不是我假设的,所以需要实时函数,因为它可以在初始页面加载后很晚。我认为这是最初生活背后的原始思想。您使用而不是直播的任何特殊原因?

答案 3 :(得分:2)

逻辑是.on()将事件绑定到DOM中的对象。然后,您将选择器作为参数给出,以找到您想要触发事件的子元素。

$("#parent_has_to_be_in_dom").on("click", "#myButton", function(event) {
    // should work like live
    alert("well hello");
});