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));
});

入力テキストでRETURNを押して、コンソールを見てみてください。

keydown
jQuery(input)
click
jQuery(input submit)

質問:ブラウザがフォームで「送信」イベントをトリガーするのではなく、送信ボタンで「クリック」イベントをトリガーするのはなぜですか?これはプロジェクトの欠陥ですか、それとも仕様ですか?フォームの送信をキャンセルせずに2番目のイベントをキャンセルするにはどうすればよいですか?

Tks

更新 言い換えると、ブラウザのイベントと自分のイベントを区別する必要があります。

4

2 に答える 2

0

使用する:

jQuery('input').bind("keydown click", function(event){
    event.preventDefault();
    console.log(event.type);
    console.log(jQuery(this));
});
于 2012-07-05T22:12:00.133 に答える
0

解決しました!

送信ボタンでクリックイベントを停止できない場合は、ユーザーのクリックとブラウザを区別することしか回避できません。区別するには、クリックイベントの代わりにマウスダウンイベントを使用browsers clickします。users click

入力テキストでRETURNを押すたびに、ブラウザは現在のフォームの最初の送信ボタンをクリックします。ただし、これは、この場合は「人間専用」のマウスダウンイベントをトリガーしません。

イベントを1回出力する修正バージョン。

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

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

于 2012-07-06T13:43:05.077 に答える