6

次のコードは、ぼやけたフィールドに 4 つの数字が入力されているかどうかを確認するためのものです。そうでない場合は、フィールド値が削除され、フィールドがフォーカスされます。削除は正常に機能しますが、focus() の呼び出しは機能しません。

$('input.dateValue').live('blur',function(event){
  if (!(/(\d){4}$/.test($(this).attr('value')))) $(this).attr('value','').focus();
});

focus() の呼び出しでフィールドがフォーカスされないのはなぜですか?

4

5 に答える 5

18

blur実際にフォーカスが失われる前にイベントが発生するため、.focus()すぐには使用できません。inputがフォーカスを失った後に実行されるように、スタックにプッシュする必要があります。あなた.focus()をタイマーに入れてください(遅延は必要ありません):

$('input.dateValue').on('blur', function(event)
{
    if ( ! /(\d){4}$/.test(this.value) )
    {
        var $this = $(this).val('');

        setTimeout(function (){
            $this.focus();
        }, 0);
    };
});​

これがフィドルです:http://jsfiddle.net/TdfFs/


更新:これChrome で機能することを示すために、別のフィドルを作成しました: http://jsfiddle.net/TdfFs/1/

于 2012-07-08T03:31:14.957 に答える
1

デモ http://jsfiddle.net/dsaSX/3/

this.valueの代わりに使用してみてください$(this).attr(...)

これが原因に役立つことを願っています。:)

.onJquery 1.7以降を使用している場合は、イベントを使用しました。

これを読んでください: jQuery .val() と .attr('value') の違いは何ですか?

ここを読む http://forum.jquery.com/topic/jquery-focus-after-blur

SetTimeOut を使用した別の既知のフォーラムソリューション http://forum.jquery.com/topic/focus-inside-a-blur-handler以下の投稿を参照

コード

$('input.dateValue').on('blur', function(event) {

    if (!(/(\d){4}$/.test(this.value))) {

        $(this).val('').focus();
    };
});​
于 2012-07-08T03:17:58.357 に答える
0

Bootstrap モーダルを使用している場合、これは機能しません。

$('#modalID').modal('show');
$('#modalID #fieldID').focus();

モーダルが描画されてフォーカスできるようになるまでに少し時間がかかるためです... 400ms のタイムアウトは、ユーザーが影響を受けないほど十分に速く、要素に常にフォーカスできるほど遅いことがわかりました。

$('#modalID').modal('show');
setTimeout(function(){  $('#modalID #fieldID').focus(); }, 400);

実際、実行可能なコメントを使用しても害はありません。

function wait_for_modal_to_be_drawn_then( fn )
{
  setTimeout( fn, 400 );
}

$('#modalID').modal('show');
wait_for_modal_to_draw_then( 
     function(){  $('#modalID #fieldID').focus(); } 
);
于 2015-07-31T14:48:03.827 に答える
0

細かいところ、

ほとんどの場合、私はそのような問題を読みました。多くの場合、イベントが正しくないことが原因です。何かにフォーカスを設定するようシステムに要求する前に、ページが処理されていることを確認してください。

これは、イベント pageshow が pagebeforeshow よりも適切な場所である例です。

このようには機能しません

/**
 *** a hook to handle list drawing. DOES NOT WORK**
 */
$(document).delegate('#dropdownPopupWindow', "pagebeforeshow", function() {
    console.log(UIPopup.TAG+"pagebeforeshow on popup dropdownPopupWindow is setting focus on field field_dropdown_label");
    $('#field_dropdown_label').focus();
});

このような作業

/**
 *** a hook to handle list drawing.**
 */
$(document).delegate('#dropdownPopupWindow', "pageshow", function() {
    console.log(UIPopup.TAG+"pageshow on popup dropdownPopupWindow is setting focus on field field_dropdown_label");
    $('#field_dropdown_label').focus();
});
于 2012-07-25T12:02:50.347 に答える
0

ぼかしの代わりにフォーカスアウトを使用

http://jsfiddle.net/fedmich/aKY9f/


チップ:

コードをインデントする

attr の代わりに、値は $.val('') を使用します

IF() を使用する場合は、ブレーキを使用してください {}

後で混乱しないように、できるだけ簡潔に記述してください。

ハッピーコーディング:)

于 2012-07-08T03:29:33.543 に答える