まず、 があります。
次のイベントをバインドします
test.onkeydown = function(){
return false;
}
test.onkeyup = function (){
return false;
}
test.onkeypress = function(){
return false;
}
2 つをコメントアウトしますそれぞれがイベントであるため、各テストは 1 つのイベントのみをバインドします。
明らかに、各関数は false を返します。戻り値によってイベントのデフォルトのアクションが妨げられる場合、テキスト ボックスには何も入力できなくなります。
以下の私のテスト結果を見て、赤い部分に注目してください。
最後に、イベントを 2 回バインドし、毎回 false を返して、デフォルトのアクションを防止できるかどうかを確認しました。
私は今でも、onclick が false を返してジャンプするかどうかをテストするために a タグを使用しています。
侦听事件返回 false 是否阻止事件默认动作 |
|
chrome |
IE-8 |
firfox |
oper |
Safari |
onkeydown |
yes |
yes |
yes |
no |
yes |
onkeyup |
no |
no |
no |
no |
no |
onkeypress |
yes |
yes |
yes |
yes |
yes |
onclick |
yes |
yes |
yes |
yes |
yes |
keydown * 2 |
no |
取最后的FN结果 |
no |
no |
no |
keypress * 2 |
no |
取最后的FN结果 |
no |
no |
no |
click * 2 |
no |
取最后的FN结果 |
no |
no |
no |
e.preventDefault(); |
yes |
no |
yes |
yes(keydown:no) |
yes |
e.returnValue = false |
no |
yes |
no |
no |
no |
確かにブラウザの性能が違うのが分かりますが、一番困るのはIEです。
最も驚くべきことは、oper でのバインディングは false を返しますが、デフォルトのアクションを防ぐことはできないことです。
そのため、今後、ブラウザのデフォルト動作を防ぐために記述する場合は、標準の方法を使用する方が良いでしょう。 (後で提供します)
そうしないと、複数人での共同作業ではかなり面倒になります。
デモが必要な場合は、電子メールで私に送ってください。投稿しません。
/* * 悲劇は起こりません。次のコードを使用します
* 最終結論
* E(e).stop(); 時間のバブリングを防止します
* E(e).prevent(); 時間のデフォルト動作を防止します
*/
var E = function(e){
e = window.event || e;
return {
stop: function() {
if (e && e.stopPropagation) e.stopPropagation( );
else e.cancelBubble = true
},
prevent: function() {
if (e && e.preventDefault) e.preventDefault(); false
}
}
}