取消一个HTML onSubmit事件



所以我把我的问题浓缩成一段HTML代码供你们自己尝试。

我相信这在Firefox 3.6中是有效的,但在最近的版本中它似乎不再起作用了。它也不能在IE9或Firefox Nightly中工作。

    <html>
    <head>
    <title>Test</title>
    </head>
    <script type="text/javascript">
    function newEvent() {
        var myEvent = document.createEvent("MouseEvents");
        myEvent.initEvent("click", false, false);
        getElementById('Test').dispatchEvent(myEvent);
    }
    </script>
    <body>
    <form action="" onSubmit="newEvent();return false;">
      <input name="OK" type="submit" value="OK" />
      <input id="Test" name="Test" type="button" onClick="alert('Success!');" value="Test" />
    </form>
    </body>
    </html>

我得到的问题是,表单被提交到页面,当我不希望它是。我试过"return false;",我试过"event.preventDefault();"。如果对dispatchEvent行进行注释,那么其他的一切都会按预期工作。我相信,由于某种原因,调度一个新的事件(点击)似乎允许onSubmit事件继续。

你可以通过点击"OK"来测试自己,这应该会触发onSubmit。预期的行为是为"Test"按钮生成一个点击事件,然后onSubmit事件被"return false;"部分取消。

你的代码中缺少了一些东西:

document.getElementById()

见第三行:

function newEvent() {
    var myEvent = document.createEvent("MouseEvents");
    myEvent.initEvent("click", false, false);
    document.getElementById('Test').dispatchEvent(myEvent);
}
http://jsfiddle.net/csrn5/2/

newEvent()中,第三行需要document.。所以发生的事情是,你得到一个错误,这个错误是停止JS之前,它到达return false

另一种演示问题的方法:

function newEvent() {
    try {
        var myEvent = document.createEvent("MouseEvents");
        myEvent.initEvent("click", false, false);
        getElementById('Test').dispatchEvent(myEvent);
    } catch(e){
        alert(e)
    }
}
http://jsfiddle.net/csrn5/4/

注意,修复错误,我只是想告诉你,这是实际的问题

最新更新