关闭HTML点击模式,跨大型项目
Closing on HTML click pattern, across large project
我想其他开发人员以前也遇到过这种情况。我们有一个很大的代码库,其中有许多组件遵循以下模式:
$('#elm').on('click',function($e){
$e.stopPropagation();
//... do stuff (i.e. Open something);
});
$('html').on('click',function($e){
//... do oposite of stuff (i.e. Close something);
}
我们的问题是,整个站点的所有stopPropagation
都停止关闭其他组件。我们真正想要的是一种机制,只阻止这个组件的click处理程序,而不阻止其他组件的click处理程序。
我正在寻找一个解决方案,这是最容易实现现在修复我们的错误,并为我们的多开发团队在未来遵循。
.live()
方法处理事件,一旦他们传播到文档的顶部,它是不可能停止传播使用实时事件这允许你做hack和利用这一点,因为.live()
方法绑定处理程序到$(document)
,并识别哪个元素触发事件在层次结构的顶部使用event.target
属性。
stopPropagation
阻止传播冒泡向上DOM层次结构,但由于处理程序位于文档级别,因此没有更高的位置可以传播。
另一方面请注意,.delegate()
处理的事件将冒泡到它们绑定的元素;在调用委托的事件处理程序时,绑定在DOM树下的任何元素上的事件处理程序将已经执行。因此,这些处理程序可以通过调用event.stopPropagation()
请看下面的例子:http://jsfiddle.net/knr3v/2/
因此,您可以使用live
和delegate
方法来代替click, bind, on方法来完成您正在解释的操作。
相关文章:
- 无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt
- 在量角器测试中验证引导模式上的项目
- PHP根据用户选择的项目以模式加载数据
- 具有依赖项目源的超级开发模式
- Angular 1.3 中是否有更好的模式,可以在每次修改 ng-repeat 中的项目时调用函数
- 就像话语之于Ember.js,什么是一些大型开源项目编写的rails + angularjs
- 针对大型项目(社交媒体)的 Javascript/jQuery 优化
- 将 emacs 用于大型多文件 JavaScript 项目
- 小型引导模式大型引导模式的内部
- jQuery同位素没有在fitColumns布局模式中对齐大宽度项目
- Knockout JS-获取一个模式弹出窗口来编辑项目
- 将NodeJS用于大型项目
- 将项目迁移到使用“;严格模式”;
- thymelaf项目中的引导模式
- 大型Angular应用的项目结构
- 开始处理大型项目
- 我的Bootstrap模式锚不是从一个菜单(导航栏)的行项目内工作
- 大型Html5项目的更好实践?(主要是Javascript,但一些Html/Css)
- 关闭HTML点击模式,跨大型项目
- 附加JavaScript事件(对于大型web项目)的最佳实践是什么?