Javascript e、 preventDefault()阻止默认行为,但不返回false。为什么?
我有以下简单的表格:Javascript e、 preventDefault()阻止默认行为,但不返回false。为什么?,javascript,jquery,forms,submit,preventdefault,Javascript,Jquery,Forms,Submit,Preventdefault,我有以下简单的表格: <form action="" id="myForm"> Use <code>return false</code> (if not checked, <code>e.preventDefault()</code> will be used): <input type="checkbox" id="myCheckbox" checked> <br/>
<form action="" id="myForm">
Use <code>return false</code> (if not checked,
<code>e.preventDefault()</code> will be used):
<input type="checkbox" id="myCheckbox" checked>
<br/>
<input type="submit" value="Submit me">
</form>
然后,JavaScript方面:
document.getElementById("myForm").addEventListener("submit", function (e) {
if (document.getElementById("myCheckbox").checked) {
return false;
}
e.preventDefault();
});
为什么return false
不阻止默认行为,而e.preventDefault()
按假设工作
根据:
return false
在调用它时会执行3个不同的操作:
event.preventDefault()代码>
event.stopPropagation()代码>
event.prevendDefault()
。这是否只在jQuery回调中发生
因为您是通过
addEventListener
附加事件,而不是通过HTML表单
元素本身的onsubmit
属性附加事件,所以您需要通过事件设置返回值,该事件使用returnValue
传递给事件处理程序。这就是为什么您会看到preventDefault
working,因为它是事件的一个属性。试试这个:
document.getElementById("myForm").addEventListener("submit", function (e) {
if (document.getElementById("myCheckbox").checked) {
e.returnValue = false; // <- Note
}
else {
e.preventDefault();
}
});
document.getElementById(“myForm”).addEventListener(“提交”,函数(e){
if(document.getElementById(“myCheckbox”).checked){
e、 returnValue=false;//仅在jQuery中,是的,但不是在vanilla JS中。@Teemu这也是我的猜测。我一直认为return false
是由浏览器处理的,而不是由jQuery处理的。您也可以阅读指定问题的公认答案。您的意思是onsubmit
属性,而不是onclick
,是吗?@IonicãBizãu是的,谢谢!早上太早了:)罗马尼亚也是早上。:-)你可以简单地做:returne.returnValue=false;
看起来好多了。;-)你能添加一些文档参考吗?为什么将false
返回到addEventListener
并不能阻止默认行为,而onsubmit='return false'
呢?我真的不知道在*
事件处理程序上使用和addEventListener
之间的区别是什么returnValue
东西是什么?AfaikreturnValue
属于遗留IE事件处理模型,在现代浏览器中完全是一个自定义属性?我最近错过了什么吗?