【问题标题】:What is the effect of `return false;` on Custom Events?`return false;` 对自定义事件有什么影响?
【发布时间】:2013-01-03 21:58:13
【问题描述】:

Similar to this question about jQuery custom events,我正在尝试找出return false; 的效果是什么,除了我没有使用jQuery。我正在通过以下方法触发自定义事件:

var event = document.createEvent('Event');
event.initEvent('CustomName', false, true);
element.dispatchEvent(event);

这是包装在一个函数中,我在调度事件后返回事件对象。现在,我在触发代码中寻找一种方法来查看是否有一个侦听器返回了false,这样我就可以阻止进一步的执行。我如何能够检测到其中一个听众是否以跨浏览器的方式(IE 7+)返回了false

【问题讨论】:

  • What does "return false;" do? 的可能副本。阅读 T.J. 的评论。克劳德在回答中。
  • @gdoron 是的,这就是 Vanilla JS 事件发生的情况。我知道。这不是关于原版 JS 事件,而是原版 JS 自定义事件。没有默认阻止。我的问题是对自定义事件对象有什么影响以及如何检测它,而不是对任何通用事件。

标签: javascript javascript-events


【解决方案1】:

它指定创建的事件是否会冒泡

(编辑)考虑以下示例:

var evt = document.createEvent('Event');
evt.initEvent('myevent', true, true); // the third argument here specifies whether the event can be cancelled
var elem = document.getElementById('mydiv');
elem.addEventListener('myevent', function(e){
    e.preventDefault();
}, true);
console.log(elem.dispatchEvent(evt)); //Here you will get return value of false because in the event handler you called e.preventDefault()

问题是您希望它与 IE 7+ 一起使用,但 IE 7 和 8 首先不支持 document.createEvent

【讨论】:

  • 阅读上面 cmets 中链接的问题的答案,您实际上会发现它并不能防止气泡。在某些浏览器中,return false; 会阻止默认设置,但并非在所有情况下都如此。
  • 好吧,我很抱歉,但我认为你错了。请参阅 [以下 MDN 上关于 initEvent 方法的文档页面] (developer.mozilla.org/en-US/docs/DOM/event.initEvent) 你不应该对我的答案投反对票。
  • 我不确定该页面上显示的内容是正确的。 initEvent 方法用于指定事件是否应该冒泡,或者可以取消,但它不指示来自侦听器的返回值的效果。
  • 好的@Ktash,我重新提出你的问题,我希望我明白你想要什么。我在编辑后的答案中添加了一些代码。
猜你喜欢
  • 2016-08-19
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
相关资源
最近更新 更多