将行为无条件地绑定到文档是不是很糟糕?

我正在处理的页面上的分页控件在有超过1页的情况下有条件地绑定。 我不喜欢在我的项目中看到以下代码,

if (pages > 1) { $('.some_class').bind('event', function() {}); } 

因为我觉得它代表了一种杂乱无章的编码风格。 我会把它放在与return语句相同的水平上,而不是使用控制。 我觉得绑定事件到全局可用对象在函数调用的本地范围内没有位置。 所以我通常做的是制作两个javascript文件,例如: pagination.jspagination-controls.js 。 在一个我有关于构建HTML和显示分页控件的逻辑。 在另一方面,我有如下声明:

$(document).on('click', '.pagination .next', function() {});

无论页面上的任何位置是否有$('.pagination .next')元素,都会触发。 我喜欢这种感觉:网站有行为,它只知道id和类,而不是某些局部范围内的实例变量。

编辑:这绝对是不好的做法,如下所述。 然而:

从jQuery 1.7开始,.on()方法是将事件处理程序附加到文档的首选方法。

关于直接和委托事件的讨论是相关的。 特别是我认为以下内容描述了我的用法:

通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委派事件来避免频繁附加和删除事件处理程序。 例如,此元素可以是模型 – 视图 – 控制器设计中视图的容器元素,如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。

编辑:所以我想现在我想知道“基于逻辑无条件地将绑定行为绑定到父元素上是不是很糟糕?” 这可能只是一个风格问题,我的原始问题已得到回答,所以我想我会接受答案。

是的,这会造成大量不必要的开销,这是一种“不好的做法”。

将事件处理绑定到顶级文档对象意味着页面中任何元素上发生的每次单击都会冒泡到document对象,其中检查事件的目标以查看它是否与.pagination .next匹配。

事实上,文档本身建议不要使用:

在文档树顶部附近附加许多委派的事件处理程序会降低性能。 每次事件发生时,jQuery必须将该类型的所有附加事件的所有选择器与从事件目标到文档顶部的路径中的每个元素进行比较。 为获得最佳性能,请将文档位置的委派事件尽可能靠近目标元素。 避免过度使用文档或document.body来处理大型文档上的委托事件。

所以,你是在滥用。 它用于直接绑定到可能具有动态创建的子元素的元素或父元素,并且您要绑定到最接近的父元素。 绑定到文档当然不是处理页面中事件的唯一方法。