0

私は正常に動作する次のコードを持っています:

// click on the button
$(".btnHeaderSearch").click(function(event) 
{ 
    event.preventDefault();
    window.open('/search.aspx?phrase=' + $('.txtHeaderSearch').val());
});

新しいウィンドウ/タブでsearch.aspxが開き、ウィンドウ/タブにフォーカスがあるか、他のすべてのウィンドウ/タブの前に表示されます。

ただし、次のコードは機能しません。

// press enter key when textbox has focus to simulate button click:
$('.txtHeaderSearch').bind('keyup', function(e) {
    if ( e.keyCode === 13 ) { // 13 is enter key
        window.open('/search.aspx?phrase=' + $('.txtHeaderSearch').val());
    }
});

ここで何が起こるかというと、ウィンドウ/タブは開きますが、他のすべてのウィンドウの後ろにウィンドウが開くか、タブフォーカスを与えずにタブが開くため、元のページのままになります。

エンターキーを押して、上のボタンクリックと同じように動作するウィンドウ/タブを開くにはどうすればよいですか?つまり、コードの両方のビットで、現在のクリックと同じように即座にフォーカスがあるウィンドウまたはタブを開く必要があります。

IE8でこの動作が発生します。Google Chromeで正常に動作し、他のブラウザでは試していません。残念ながら、IE8でこれを機能させる必要があります。

4

6 に答える 6

2

http://msdn.microsoft.com/en-us/library/ie/ms537632(v=vs.85).aspxから:

ページ要素をクリックしたり、リンクにタブで移動してEnterキーを押したりするなど、ユーザーアクションの直接の結果として、Webサイトのすべてのポップアップウィンドウが開いていることを確認します。

実際、あなたのコードは私にはまったく機能しませんでした。IEのデフォルトのポップアップブロッカーがそれをブロックしただけです。ほとんどのユーザーはそれを許可しないので、私はそれを受け入れられないと思います。

Enterキーを押したときにフォーカスを非表示のリンク(タブで移動するのと同じ)に移動することで回避しました(キーアップ後は遅すぎるため重要です)。離すと、その上でEnterキーを押すのと同じになります。リンクしてポップアップを開きます。

HTML:

<input class="txtHeaderSearch">
<a id="hidden-link" href="#">needs to have content</a>

CSS:

#hidden-link {
    position: absolute;
    left: -9999px;
    top: -9999px;
}

Javascript:

$('.txtHeaderSearch').bind('keydown', function(e) {
    if (e.which === 13) { // which is normalized by jQuery
        $("#hidden-link").focus();
    }
});

$("#hidden-link").click(function() {
    var win = window.open('/search.aspx?phrase=' + $('.txtHeaderSearch').val());
    //win.focus(); 
    //The above is optional, if the window opens but doesn't focus then uncomment the above line
});

デモ:

http://jsfiddle.net/UCcqM/2/

この同じ回避策は他のブラウザでは機能しないため、IEを検出し、ブラウザに応じて適切なソリューションを条件付きで使用する必要があります。

于 2012-08-06T15:33:16.320 に答える
1

これを使用して、誰かがテキストボックス内のEnterキーを押したときにボタンをクリックします。

// press enter key when textbox has focus to simulate button click:
$('.txtHeaderSearch').keyup(function(e) {
    if ( e.keyCode === 13 ) { // 13 is enter key
        $(".btnHeaderSearch").click();    
    }
});
于 2012-07-27T14:47:52.330 に答える
1

このように、.txtHeaderSearchキーアップイベントで.btnHeaderSearchをクリックするように試みることができます。

$('.txtHeaderSearch').bind('keyup', function(e) {
    e.preventDefault();
    if (e.keycode === 13) {   
        $('.btnHeaderSearch').click();
    }
}
于 2012-07-27T14:48:01.830 に答える
0

私はこれをIE8でテストしました

http://jsfiddle.net/74mtV/2/

初めて発生すると、ポップアップ警告が表示され、ウィンドウは開かれませんが、両方のイベントを許可した後、フォーカスが設定された新しいポップアップウィンドウが開きます。

通常モードと互換性を有効にしてテストしました。

于 2012-08-06T10:45:08.393 に答える
0

例えば:

    <form action="page2" method="get" onsubmit="return func()">
      <input type="text" name="search"/>
    </form>

テキストボックスに何かを書き込んでEnterキーを押すと、func()が呼び出され、trueが返されると、フォームが送信されます(http://example.com?search = ....)

したがって、問題については、例の値を置き換えて、送信前のジョブを処理する関数を定義するだけです。

于 2012-08-06T12:14:36.257 に答える
0

問題は動的バインディングにある可能性があります。以下のリンクが機能します 。http://jsfiddle.net/madhuvana/McaXj/2/

于 2012-08-06T14:43:45.667 に答える