2009-08-05 18 views
7

私は現在、選択ボックスの値をチェックし、そのすぐ隣にあるテキストフィールドを有効にして、うまくフォーカスを設定するスクリプトを持っています。jQueryの次の入力にフォーカスを設定していますか?

私は正直に「フォーカス」ビットに引っかかっビットだ

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); } 
    else { $(this).next('input').removeAttr("disabled"); } 

}); 

...入力フィールドを有効に正常に動作し、現時点ではこれを持って、私は「$(これを試してみました).next( 'input')。focus(); "それはどちらかのJavaScriptエラーを起動しませんでしたが、それはすべてのアイデアは、人を喜ば

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); $(this).next('input').focus(); } 
    else { $(this).next('input').removeAttr("disabled"); } 

}); 

...、全然集中していませんでしたか?私は本当にこれに固執して、それは非常にシンプルだが、私が構築しているページに非常に便利な追加になるだろう!

おかげ

+0

はあなたにも、あなたのHTMLを投稿してもらえますか? – RaYell

答えて

5

。また、次のフィルタは必要ありません。 next()は次の兄弟しか返すことができません。フィルタは、基本的には、それが入力または任意のフィルタを指定した場合にのみ、私を次のものにすると言っています。次のフィルタが目的のオブジェクトであることが分かっている場合は、フィルタを含める必要はありません。

$("#assessed select").change(function() { 
    var $this = $(this); 
    if($this.val() === 'null') { 
     $this.next() 
      .attr("disabled", true); 
    } 
    else { 
     $this.next() 
      .removeAttr("disabled") 
      .focus(); 
    } 
}); 
+0

絶対完全で、私が使っていたものよりも優れた解決策です、ありがとう! – Nick

1

私はあなたの問題は、それが(少なくとも一部のブラウザ/オペレーティング・システムで)無効入力コントロールにフォーカスを設定することはできませんということかもしれないと思います。

あなたのfocus()コールは基本的に間違ったブロックにあります。ブロックはelseブロックで、ifブロックではありません。このよう

:キャッシュされたこのJQオブジェクトと上記の回答の変形

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); } 
    else { $(this).next('input').removeAttr("disabled"); $(this).next('input').focus(); } 
}); 
+0

ハ!多くの方に感謝しています。Rob ...私は「else」ではなく「if」に焦点を当てていることを実感しました! 絶対教師のエラー、申し訳ありません、多くのありがとうございました - あなたが投稿したときまで投稿しました:) – Nick

+0

$(this)を複数回呼び出すのではなく、キャッシュしてください。 – redsquare

+0

完了、ありがとう:) – Nick

14

はまた、次の入力を取得するための素晴らしい小さなプラグインを見つけました:http://jqueryminute.com/set-focus-to-the-next-input-field-with-jquery/

$.fn.focusNextInputField = function() { 
    return this.each(function() { 
     var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select').not(':hidden'); 
     var index = fields.index(this); 
     if (index > -1 && (index + 1) < fields.length) { 
      fields.eq(index + 1).focus(); 
     } 
     else {fields.first().focus();} 
     return false; 
    }); 
}; 
+4

'.not( ':hidden')'をフィールド宣言に追加すると、可視要素のみが選択されます。また、 'else {fields.first()。focus();}'を追加して、フォーカスを最初の要素に折り返すようにします。 –

+0

なぜあなたは親のフォームを探しますか:最初にeq(0)? – Serge

+0

@Serge入力要素がある親フォームを選択します。「eq(0)」が必要なのかどうかわかりません。自分のコードではないので、わかりません。 – TimoSolo

関連する問題