0

ajax オートコンプリートを使用するテキスト入力フィールドがあります。結果は、垂直スクロール バーのある jScrollPane パネルに表示されます。

ユーザーが jscrollPane ドロップダウンのスクロール バーをクリックすると、入力フィールドのブラー イベントが発生する IE 固有の問題が発生しています (スクロール バーの上下矢印は、以下に示すアンカー タグとして生成されます)。

私の理解では、 false を返すとイベントの伝播が停止するはずです。これが、mousedownclickイベントの両方がアンカー タグに対して false を返す理由だと思います。これは Firefox と Chrome では正常に機能しますが、IE では機能しません。

以下には示されていませんが、イベントで次のコードを使用しようとしましたが、役に立ちませんでした。

    e.preventDefault ? e.preventDefault() : e.stop();
    e.returnValue = false;
    e.stopPropagation();

私の最初の質問は次のとおりです。

あるタイプのイベントの伝播を停止すると、他のタイプのイベントの伝播が実際に停止することを期待できますか?

つまり、mousedownfalse を返すイベントがトリガーされた場合、これにより、ブラーまたはフォーカス アウト イベントが発生しなくなりますか?

この問題を回避して、IE が Firefox や Chrome と同じように動作するようにするにはどうすればよいですか?

var rf = function() { return false; };

$('<a></a>')
    .attr({'href':'javascript:;', 'className':'jScrollArrowUp'})
    .css({'width':settings.scrollbarWidth+'px'})
    .html('Scroll up')
    .bind('mousedown', function()
    {
        currentArrowButton = $(this);
        currentArrowDirection = -1;
        onArrowMouseDown();

        return false;
    })
    .bind('click', rf)

$("#InputBox").blur(function(e) {
    hasFocus = 0;
    if (!config.mouseDownOnSelect) {
        hideResultsNow();
    }
4

2 に答える 2

0

これは 3 年遅れていますが、実際には IE ≤ 8で他のブラウザーで行うこと (選択e.preventDefault()妨げ、フォーカスを妨げる) を行う方法があることを発見しました:属性を設定してください! http://jsbin.com/yagekiji/1mousedownunselectable

常に提案されている回避策 (ここに他のものを含む) とは異なり、これは常に に要約されますがsetTimeout(function() { thingIDidntWantFocusStolenFrom.focus(); })、これはmousedownそもそもターゲットによってフォーカスが盗まれるのを防ぎます!

おもしろいのunselectableは、それが継承されていないことです。そのため、selectstartイベント (バブル、およびe.preventDefault()選択を妨げますが、フォーカスを妨げないイベント) を支持して見過ごされることがよくあります。または、ツリー トラバーサル (のようなこれが可能かもしれないという点で最初に私を手がかりにしたStackOverflowの回答、またはTim Downの一連 ほぼ 同一の 回答)が、実際にはオンに設定できevent.targetますmousedown

(また、jQuery チケット: http://bugs.jquery.com/ticket/10345 )

于 2014-04-30T19:22:18.267 に答える
0

IE のみで同じ問題が発生します。

何時間もの実験とグーグル検索の後、ぼかしイベントとアクション (リストの非表示) の間にわずかな遅延を使用することにしました。クリックイベントがトリガーされる時間を与えます。次に、クリックイベントハンドラーで、スケジュールされた遅延ぼかしイベントの処理を確認する必要があります。そうであれば、その処理をキャンセルします。

于 2011-12-31T02:15:10.103 に答える