2010-04-14 15 views
0

以下是我正在使用的測試頁。這個版本工作正常,轉發到#SUCCESS:中斷原型處理程序,alert()vs event.stop()

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html><head> 
<script type="text/javascript" src="prototype.js"></script> 
</head><body> 

<form id='form' method='POST' action='#fail'> 
    <button id='button'>Oh my giddy aunt!</button> 

    <script type="text/javascript"> 
    var fn = function() { 
     $('form').action = "#success"; 
     $('form').submit(); 
    } 
    $('button').observe('mousedown', fn); 
    </script> 
</form> 

</body></html> 

如果我清空處理程序:

var fn = function() { 
} 

表單提交,但當然,我們被送到#fail這個時候。

隨着處理程序的警告:

var fn = function() { 
    alert("omg!"); 
} 

的形式沒有提交。這非常好奇。

隨着event.stop(),這是爲了防止瀏覽器採取的默認操作:

var fn = function(event) { 
    event.stop(); 
} 

我們被送到#fail。

所以alert()event.stop()更有效地阻止提交。是什麼賦予了?

我使用Firefox 3.6.3和Prototype 1.6.0.3。這種行爲也出現在Prototype 1.6.1中。

+0

它看起來像攔截和停止點擊以及mousedown實際上防止默認操作。 不知道alert()的行爲如何,可能是瀏覽器問題。 – lxs 2010-04-14 12:58:23

回答

0

這似乎是表單提交繼續的原因是因爲我也沒有捕捉點擊。

2

您無法使用Event.stop(event)停止表單提交的原因是因爲您正在觀察的事件是mousedown事件,而不是form.submit()事件。我猜alert()阻止提交的原因是因爲你已經覆蓋了默認的輸入類型=「按鈕」

+0

關閉,似乎提交表單繼續的原因是因爲我沒有捕獲點擊。我仍然沒有看到觀察(不覆蓋)mousedown必須提醒()的相關性。 – lxs 2010-04-15 11:13:17

0

它看起來像'e'在你的event.stop需要是大寫(讀Event.stop();)

+0

我認爲在IE上是正確的,在FF事件作爲參數傳遞,所以大寫字母應該匹配形式參數,因爲它:) – lxs 2010-08-26 07:56:41