关于非现在元素的jQuery事件

前端之家收集整理的这篇文章主要介绍了关于非现在元素的jQuery事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在某些情况下(基于 PHP)将事件绑定到不在页面上的ids是不是很糟糕?会导致代码错误和缓慢,还是jQuery会自动忽略它们?

我应该像以下那样对每个可能不存在的元素进行放置吗?

if ( $('#element') ){
    $('#element').click(function(event) {}
}

我的页面设置是某些编辑框在某些条件下没有加载,以保持功能不被尝试..我设置了一个条件PHP包,因为它是基于数据库中的情况,我不真的想传递给前端.

现在,页面上的所有js都在一个单一的文件中,具有许多功能.

解决方法

当jQuery选择器不返回任何元素时,不会绑定任何事件.所以你不用写if语句就没有任何伤害.

这意味着内部jQuery将事件处理程序绑定到所有匹配的元素.当没有,任何处理程序将被绑定到任何元素.这意味着:您不必在代码中检查元素的存在.

以后的参考

每当你在做

if ( $('#element') ){
    $('#element').click(function(event) { /* blah blah */ });
}

你应该保存选择器结果

var result = $('#element');

// check number of elements (zero equals false,anything else equals true)
if (result.length) {
    result.click(function(event) {
        // blah blah
    });
}

result.length与result.size()相同.

将事件处理程序绑定到非现有元素

如果您的界面将生成新的元素,并希望在添加到DOM中时附加eevent处理程序,那么您应该使用delegate()函数.还有live()函数,但是尽可能使用第一个,因为它是一个更好的选择.网上有很多资源为什么这是真的.例如This Stackoverflow answer.

Note: As of jQuery 1.7,.delegate() has been superseded by the 07001 method. For earlier versions,however,it remains the most effective means to use event delegation.

See 07002.

猜你在找的jQuery相关文章