2012-07-05 82 views
0

我有這樣的代碼 http://jsfiddle.net/2Gay9/3/爲什麼瀏覽器觸發點擊事件而不是提交表單?

HTML

<form action="/" method="get" onsubmit="return false";> 
    test: <input type="text" value=""> 
    <input type="submit" value="submit"> 
</form> 

JS

jQuery('input').bind("keydown click", function(event){ 
    console.log(event.type); 
    console.log(jQuery(this)); 
}); 

嘗試在輸入文本回車,看看控制檯:

keydown 
jQuery(input) 
click 
jQuery(input submit) 

問題:爲什麼瀏覽器在提交按鈕上觸發'click'事件,而不是觸發表單中的'submit'事件?這是項目缺陷還是規範?我怎樣才能取消第二個事件沒有取消表單提交?

韓國社交協會

UPDATE 換句話說,我只需要從瀏覽器事件diferenciate我的事件。

+0

可能重複:http://stackoverflow.com/questions/4763638/enter-triggers-button-click – 2012-07-05 22:02:21

回答

0

解決了!

如果我無法停止提交按鈕上的點擊事件,我可以workarround只有diferenciating瀏覽器從用戶點擊。若要diferenciate browsers clickusers click我將使用mousedown事件而不是點擊事件。

每當我們在輸入文本中點擊RETURN時,瀏覽器觸發器會以當前的形式單擊第一個提交按鈕。但是這並不會觸發這種事件,在這種情況下是「人類專用」。

固定版本,打印一次事件。

jQuery('input').bind("keydown mousedown", function(event){ 
    console.log(event.type); 
    console.log(jQuery(this)); 
}); 

http://jsfiddle.net/2Gay9/6/

0

使用:

jQuery('input').bind("keydown click", function(event){ 
    event.preventDefault(); 
    console.log(event.type); 
    console.log(jQuery(this)); 
}); 
+0

我不想做站表單提交,因爲我有很多JS的依賴在這。我只想從瀏覽器事件中分辨我的事件。 – Topera 2012-07-05 22:18:55

+0

你的意思是自定義事件/事件代表團? – Alex 2012-07-05 22:27:45

+0

不,我只想知道用戶是否點擊了提交按鈕,或者點擊是否被瀏覽器觸發。 – Topera 2012-07-05 22:32:39

相關問題