在某些情况下(基于
PHP)将事件绑定到不在页面上的ids是不是很糟糕?会导致代码错误和缓慢,还是jQuery会自动忽略它们?
我应该像以下那样对每个可能不存在的元素进行放置吗?
if ( $('#element') ){ $('#element').click(function(event) {} }
我的页面设置是某些编辑框在某些条件下没有加载,以保持功能不被尝试..我设置了一个条件PHP包,因为它是基于数据库中的情况,我不真的想传递给前端.
解决方法
当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.