0

同じクラスを持ち、ID を持っていない多くの入力が 1 ページにあります。
条件が true の場合にフォーカスを返すために、クラス セレクターの bind イベントに添付されます。

しかし、別の入力フォーカスをクリックしても戻りません。
別の要素で作業がぼやけている原因を考えてみてください。しかし、これをどのように解決する必要があるのか​​ わかりません。

<input class="test" value="">
<input class="test" value="">

$(document).ready(function(){
      if (condition) {
    // return focus - not work
    $(".test").blur(function(){
        setTimeout(function() {
        $(this).focus();
        }, 100);
    });
   }
});
4

2 に答える 2

2

ここには 2 つの問題があります。

まず、setTimeout関数が実行されると、入力の 1 つではなくオブジェクトにthisなります。windowオリジナルへの参照をthisぼかしハンドラの一部として保存します。

次に、条件チェックを移動する必要があります。現状では、ブラー ハンドラーがアタッチされており、常に再フォーカスされるため、一度ブラーを適用すると入力ボックスを離れることは事実上ありません。私はあなたが何であるかわからないconditionので、setTimeoutコールバックに配置します。setTimeoutまた、創造の前に行くこともできます。

これは、想定される実装の詳細なデモ フィドルです。以下は骨抜きにされた例です:

<input class="test" value="">
<input class="test" value="">

$(document).ready(function(){
    // return focus - not work
    $(".test").blur(function(){
        var that = this;
        setTimeout(function() {
          if (condition) {
            $(that).focus();
          }
        }, 100);
    });
});
于 2013-09-05T13:56:55.033 に答える
0

条件はぼかしイベントである必要があります。このフィドルを参照してください: http://jsfiddle.net/UudLV/1/

入力値が空の場合、最後にフォーカスされた入力にフォーカスを戻します。

$(".test").blur(function() {
    if($(this).val().length === 0) { //Your condition, can be anything
        $(this).focus(); //Return focus
    }
});

フォーカスを最後にフォーカスされた要素に戻すことは、セレクターとは関係ありません。on blurイベントは、最後にフォーカスされた要素をコンテキストとしてコールバック関数に渡すため、要素にthisなります。

編集*これがOPがやりたいことかどうかは完全にはわかりません。

于 2013-09-05T14:01:42.857 に答える