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
    东西是什么?Afaik
    returnValue
    属于遗留IE事件处理模型,在现代浏览器中完全是一个自定义属性?我最近错过了什么吗?