0

<select>別のフィールド値に従って変化するオプションを含む要素を含むフォームがあります。

そのため<select>、他のフィールド値が設定されていない場合にアイテムがフォーカスを得ると、ぼかしイベントが前のものでトリガーされ、フォーカスが後者でトリガーされます。

これが私のコードの簡略版です:

$(document).on('focus', '#requiresOuterValue', 
function() {
    if( isNaN(parseInt( $('#outerValue').val() )) )
    {
        $('#outerValue').trigger('focus');
    }
});

このコードは Firefox では正常に動作します (ドロップダウン コンテンツが消え、#outerValue がフォーカスを取得します) が、#outerValue がフォーカスを取得する chrome では機能しませんが、<select>アイテムのコンテンツも表示されます。

4

2 に答える 2

0

うーん.. 'focus' jquery イベントの代わりにネイティブの 'focus' メソッドを使用しようとしましたか?

$('#outerValue')[0].focus();

jQuery イベントのトリガーに暗黙的なブラウザー ネイティブの動作があるかどうかはわかりません。

于 2013-11-11T09:41:52.293 に答える
0

さて、私は解決策を思いつきました。

あなたの問題は、 a の閉鎖がselectすべてのブラウザで標準ではないことです。クロージャーをシミュレートするために私が見つけた唯一の方法は、 select.

コードは次のとおりです。

$(document).on('focus', '#requiresOuterValue', function() {
        var requiresOuterValue = $("#requiresOuterValue").clone();

        if( isNaN(parseInt( $('#outerValue').val() )) )
        {
            $('#outerValue').trigger('focus');
            $("#requiresOuterValue").replaceWith(requiresOuterValue);
        }
});

編集:ここでフィドルhttp://jsfiddle.net/JonnyMe/C9rKL/1/

jQuery プラグインの実装

目標を達成するために jQuery プラグインを実装することもできます。

$.fn.closeSelect = function() {
    if($(this).is("select")){
        var fakeSelect = $(this).clone();
        $(this).replaceWith(fakeSelect);
    }
};

そして、次のように使用します。

$(document).on('focus', '#requiresOuterValue', function() {
        if( isNaN(parseInt( $('#outerValue').val() )) )
        {
            $('#outerValue').trigger('focus');
            $("#requiresOuterValue").closeSelect();
        }
});
于 2013-11-11T10:21:38.363 に答える