In JavaScript event handling, why “return false” or “event.preventDefault()” and “stopping the event flow” will make a difference?
据说,当我们处理"click事件"时,返回false或调用event.preventDefault()会产生不同,其中
the difference is that preventDefault
will only prevent the default event
action to occur, i.e. a page redirect
on a link click, a form submission,
etc. and return false will also stop
the event flow.
这是否意味着,如果对多个操作多次注册Click事件,则使用
1 | $('#clickme').click(function() { … }) |
返回false将阻止其他处理程序运行?
我现在在Mac上,所以只能使用Firefox和Chrome,而不能使用IE,它有一个不同的事件模型,通过添加3个处理程序在FF和Chrome上测试它,所有3个处理程序都在运行,没有任何停止。那么,真正的区别是什么呢,或者,是否存在"停止事件流"不可取的情况?
这与
使用jquery的animate(),如果单击的元素为"",函数仍应返回false?
和
e.preventDefault();和返回false有什么区别?
希望这段代码能解释给你…
HTML
1 2 3 | click me click me ? |
JQuery
1 2 3 4 5 6 7 8 9 10 11 12 13 | $('div').click(function(){ alert('I am from '); }); $('a.a1').click(function(){ alert('I am from '); return false; // this will produce one alert }); $('a.a2').click(function(e){ alert('I am from '); e.preventDefault(); // this will produce two alerts });? |
演示
或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $('div').click(function(){ alert('I am from '); }); $('a').click(function(){ alert('I am from '); }); $('a.a1').click(function(){ alert('I am from '); return false; }); $('a.a2').click(function(e){ alert('I am from '); e.preventDefault(); });? |
演示2
写入
相反,它们将阻止浏览器的默认反应,例如导航到链接。
在jquery中,可以编写
1。使用
1 2 3 | function handleEvent(evt) { evt.preventDefault(); } |
2。使用
1 2 3 | function handleEvent() { window.event.returnValue = false; } |
三。使用属性或事件处理程序属性添加的事件处理程序。
1 | <input type="button" value="Do stuff!" onclick="return handleEvent(event)"> |
或
1 | button.onclick = handleEvent; |
在这种情况下,
1 2 3 | function handleEvent() { return false; } |
有时,事件监听器想要取消事件的副作用,这是有兴趣的。想象一下一个文本框,您希望它只允许数字。因为文本框可以接受任何东西,所以有必要告诉浏览器忽略输入的非数字。这是通过侦听密钥事件来实现的,如果键入了错误的密钥,则返回false。
这并不能完全回答你的问题,但前几天我用yui的
但是在那之前的几天,我有一个
最好的是能够压扁整个相关事件链,因为我已经尝试了传播和
编辑:我不介意知道jquery如何处理我的双重事件情况,如果有人愿意对此发表评论的话。