- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在为一个 JavaScript 库编写事件处理代码,我正在尝试实现类似于 stopImmediatePropagation()
的东西,它也可以在 IE 6 中工作。
当前事件处理的工作方式是,我们的事件处理代码向对象注册,然后用户向我们的事件处理程序注册他们的所有事件。
我尝试模拟 stopImmediatePropagation()
的第一种方法是将该方法简单地添加到事件中(如果它尚不存在):
if (event != null && event.isImmediatePropagationEnabled == null) {
event.stopImmediatePropagation = function () {
this.isImmediatePropagationEnabled = false;
};
event.isImmediatePropagationEnabled = true;
event.isImmediatePropagationStopped = function () {
return !this.isImmediatePropagationEnabled;
};
}
当调用用户的事件处理程序回调时,它们将传递到我们获得的同一事件对象中。如果他们愿意,他们可以在事件上调用 stopImmediatePropagation()
。
当我们循环遍历向我们注册的所有事件处理回调时,我们每次都会检查传播 bool 值:
given some event
for [all the callbacks] {
if (event != null &&
event.isImmediatePropagationStopped != null &&
event.isImmediatePropagationStopped()) {
stopPropagation = true;
break;
}
execute the callback, passing in the event
}
这在某些浏览器中效果很好。因为事件持续存在,即使我们的事件处理代码退出并且事件冒泡到下一个元素,一旦我们的事件处理代码再次被命中,isImmediatePropagationStopped
属性仍然存在,因此不再有回调(即已在我们这里注册)已执行。
在 Internet Explorer 中(甚至在 8 中),这不起作用。在相同的元素上,一切都很好;但是一旦事件冒泡,就好像生成了一个全新的事件对象,我们就失去了 isImmediatePropagationStopped
属性。这意味着我们无法检查用户是否关闭了传播。
所以我的问题是,有人对如何执行此操作有任何想法吗?我知道 jQuery 管理着类似的壮举 ( http://bugs.jquery.com/ticket/3355 ),但他们以类似的方式进行——将其存储在对象的额外数据中。我不知道的是对象的非持久性如何不会像伤害我一样伤害他们。 (由于各种原因,在这里使用 jQuery 本身不是一个选项)
如果有人有任何见解 - 无论是因为比我更了解 JavaScript,还是因为他们可以想出一种巧妙的方法来做到这一点 - 我将不胜感激。
最佳答案
试着稍微改变一下你的函数:
event.stopImmediatePropagation = function () {
this.isImmediatePropagationEnabled = false;
this.cancelBubble = true;
};
那个“cancelBubble”标志是 IE 的东西,它应该防止事件冒泡到父 DOM 元素链。
关于javascript - 我怎样才能模仿 stopImmediatePropagation() 的行为(不使用 jQuery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6446482/
我正在为我自己的对象模型重用 native 事件类。 我发现并使用了 Event.stopBubbling 属性,该属性在调用 Event.stopPropagation() 后确实设置为 true。
考虑以下代码: HTML testlink JavaScript $('#myLink').on("mousedown",doMouseDown); function doMouseDown(e) {
我想使用 stopImmediatePropagation 来防止触发同一元素上的第二个(鼠标按下)hadler,但它不起作用。代码示例: $(function() { var showEvent
我在 DOM 填充期间添加了几个图像元素,我使用 jQuery“on”将点击监听器附加到添加的每个图像,为了防止在单击图像时传播事件我使用了 stopImmediatePropagation,但是这没
将@angular/platform-browser(和其他@angular/xxx)升级到版本 6.0.4 后,我在应用程序的第一次加载和每次第一页重新加载后出现此错误(第一个 F5:错误,第二
IE 缺少对 stopPropagation() 的支持,requires workarounds ,但我无法判断 stopImmediatePropagation() 是否也是如此 - 它对所有浏览
我有这样的代码: NEXT 此应用程序包含一个库,不允许对其进行编辑。单击“ui-button-next”时,它们会调用 event.stopImmediatePropagation() 来停止
event.stopPropagation()和event.stopImmediatePropagation()有什么区别? 最佳答案 stopPropagation 将阻止任何 父 处理程序被执行
任务 - 为 Angular 库创建一个可重用的按钮/ anchor 标记属性选择组件,其中尽可能多的行为逻辑绑定(bind)在组件本身而不是 HTML 标记上。 理想情况下,HTML 标记应尽可能干
目前,当我取消注释 e.stopImmediatePropagation(); 时,该代码片段仅允许切换每个菜单。 问题是我无法使用 e.stopImmediatePropagation(); 因为我
如果满足特定场景,我想限制对 anchor 按钮单击的进一步操作。在将事件处理程序附加到正文时,我下面给出的一段代码不起作用。 anchor 是 Continue jquery部分是 $('body'
我有一个使用 Jquery 和 Ajax 将数据发送到服务器端的表单,但是即使我在我的应用程序中应用了 preventDefault() 和 stopImmediatePropagation 也提交了
我得到这个代码 http://www.technoread.net/webdesign/javascript-a-jquery/item/89-live-table-edit-delete-with-
我在某些文本点击时显示搜索字段,并在搜索输入模糊时隐藏它。 但如果我点击搜索按钮,我不想隐藏输入字段,并防止它被隐藏(因为模糊)。我尝试 stopImmediatePropagation() 但没有任
我正在尝试修改 Jira Tempo 插件的计划工作表。所以在节奏时间表页面我有一个绑定(bind)了 2 个 Action 的按钮,一个是点击 Action ,一个是聚焦。单击操作会打开一个弹出窗口
我正在尝试加快网页速度,但由于我是 JavaScript 的新手,优化并非没有错误。我创建了我想与 Window.requestAnimationFrame() 结合使用的 onclick 过渡效果。
我相信 event.stopImmediatePropagation() 不适用于 Chrome for Android。有人能解决吗? (替代代码)?谢谢。 最佳答案 尝试 event.callNo
我有一个用于创建图像轮播的 jQuery 代码。我知道这不是最优雅的代码。 jQuery(function(){ $(".project").css('max-height','180px'); //
如何从 onclick 中获取事件对象?属性? 我试过: Click me 另外,我试过这个: Click me 但是控制台只显示元素。 最佳答案 我认为您必须在 中定义函数在别处标记。 简单地使用
我正在为一个 JavaScript 库编写事件处理代码,我正在尝试实现类似于 stopImmediatePropagation() 的东西,它也可以在 IE 6 中工作。 当前事件处理的工作方式是,我
我是一名优秀的程序员,十分优秀!