8

私はjQueryを使用していますが、ユーザーが検索フィールドにデータを入力して検索を開始した後にEnterキーを押すことができるようにしたいと考えています。

私は次のコードを使用しています:

        $('#textSearch').keyup(function (event) {
            if (event.keyCode == '13') {
                doSearch();
            }
            return false;
        });

Firefox と IE では完全に機能しますが、Safari ではまったく機能しません。サファリでEnterキーを押すとフォームが送信されますが、それは私が望んでいるものではありません。

onsubmit="return false;" の追加 フォームに機能しますが、フォームタグがasp.netページのマスターページにあり、フォームを他のページに送信する必要があるため、オプションではありません。

この機能を Safari でも動作させる方法はありますか?

編集: doSearch() 関数の代わりにアラートを表示しようとしました。アラートは正常に表示されますが、その後フォームが送信されます。

4

5 に答える 5

4

どのイベントが送信をトリガーするかは、ブラウザーによって異なる場合があります。この場合、Safari は keydown イベントで送信している可能性があります。
マークアップを変更せずに送信イベントを監視してキャンセルできます。

$('#the-id-of-the-form').submit( function( e ) {
    e.preventDefault();
});

次に、keyup イベントをリッスンして、現在行っているように処理できます。

于 2010-10-03T15:35:28.550 に答える
3

これを試して:

    $('#textSearch').keyup(function (event) {
        var key = event.keyCode || event.which;

        if (key === 13) {
            doSearch();
        }
        return false;
    });
于 2010-10-03T14:53:25.810 に答える
1

追加防止デフォルト

$('#textSearch').keyup(function (event) {
    if (event.keyCode == '13') {
        event.preventDefault();
        doSearch();
    }
    return false;
});
于 2010-10-03T15:25:58.213 に答える
0

「keyup」がうまくいかなかったので、「keydown」を使用します。また、この入力を AJAX で追加している入力フィールドで無効にする必要があったため、「ライブ」になりました。

「変更」ハンドラをフィールドにバインドする必要があります。このバージョンは、フィールドを出て (「ぼかし」)、フィールドで変更をトリガーし、変更を開始します。ぼかしがなければ、変更は 2 回トリガーされます。

 $('#textSearch').live('keydown', function(event) {
  if(event.keyCode == 13)
  {
  $(event.target).blur();
  $(event.target).change();
  event.preventDefault();
  return false;
  }
 }
);
于 2010-10-11T07:58:07.293 に答える
0

「keyup」がうまくいかなかったので、「keydown」を使用します。また、この入力を AJAX で追加している入力フィールドで無効にする必要があったため、「ライブ」になりました。

「変更」ハンドラをフィールドにバインドする必要があります。このバージョンは、フィールドを出て (「ぼかし」)、フィールドで変更をトリガーし、変更を開始します。ぼかしがなければ、変更は 2 回トリガーされます。

    $('#textSearch').live('keydown', function(event) {
  if(event.keyCode == 13)
  {
  $(event.target).blur();
  $(event.target).change();
  event.preventDefault();
  return false;
  }
 });
于 2010-10-11T08:21:26.800 に答える