javascript - .click(...) 和 .live ('click' , ...) 有什么区别?

标签 javascript jquery

考虑 following code :

HTML:

<div id='button' class='enabled'>Press here</div>
<div id='log'></div>

CSS:

#button {
    width: 65px;
    height: 25px;
    background-color: #555;
    color: red;
    padding: 10px 20px;
}
#button.enabled {
    color: #333;
}
#button.enabled:hover {
    color: #FFF;
    cursor: pointer;
}

JavaScript:

$(function() {
    $('#button.enabled').live('click', function() {    // (1)
    //$('#button.enabled').click(function() {          // (2)
        log('#button.enabled clicked');
    });
});
function log(str) {
    $('#log').append(str + '<br />');
    $('#button').toggleClass('enabled');
}

此代码按预期工作,即 log() 仅在单击 enabled 按钮时调用。

但是,如果我将 (1) 替换为 (2)log() 也会在未启用时被调用 按钮被点击。
这是为什么?
(1)(2) 有什么区别?

最佳答案

区别在于.click()click 处理程序绑定(bind)到元素。这是最重要的事情,对元素,所以无论元素 $('#button.enabled') 选择器匹配 at它被绑定(bind)的时间,被绑定(bind)...不管它选择器以后不再匹配。

.live() 在事件发生时检查选择器以查看它是否应该运行处理程序...因此更改类确实很重要,因为它不再匹配。 .live()处理程序依赖于 document 并依赖于 event bubbling ,因此它必须检查选择器以查看它是否来自应为其执行处理程序的元素。

关于javascript - .click(...) 和 .live ('click' , ...) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651259/

相关文章:

javascript - 使用 PHP 和 JS 从 URL 解析 JSON

javascript - 找不到jquery,找不到ajax

jquery - 在 jQuery 中绑定(bind)函数之前检查元素存在的最佳方法?

javascript - 使用三元运算符切换按钮文本

Javascript 从事件处理程序获取对父对象/类的引用

javascript - 预先输入特定列表

javascript - 收到错误-ReferenceError : value is not defined

javascript - 创建动态 jquery 工具提示

javascript - 用 Jquery 或 JavaScript 替换悬停时的文本

javascript - 如何使用在单击按钮上创建的用户触发放大和缩小绘图图表?