2011-11-28 44 views
2

所以我把我的問題簡化成了一段HTML代碼,供大家自己嘗試。取消HTML onSubmit事件

我相信這是在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> 

我得到的問題是表單正在提交到頁面,當我不希望它是。我試過「返回false」,我試過「event.preventDefault();」。如果您評論dispatchEvent行,則其他一切按預期工作。我導致相信由於某種原因派發新事件(點擊)似乎允許onSubmit事件繼續。

您可以通過點擊「確定」來測試自己,這應該在onSubmit上觸發。預期的行爲是爲「測試」按鈕生成單擊事件,然後通過「返回false」取消onSubmit事件。部分。

任何有識之士將不勝感激。

回答

2

你缺少你的代碼的東西:

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/

注意,修正這個錯誤,我只是想告訴你,這是實際的問題。

+0

謝謝Jared。你已經用我提供的例子解決了這個問題。不幸的是,這不是我的原始代碼的問題,但我會仔細看看,並嘗試使用您提供的示例代碼來捕捉錯誤。 – Nathan