2017-05-28 6 views
0

私は2つのタブがあります。各タブには、フィールドの複数のセクションを持つ別々のフォームがあります。フィールドは、ブートストラップラジオまたはチェックボックスボタングループです。jQueryバインド '変更'複数のフィールドの範囲に

各セクションは任意の数のフィールドを持つことができます。

私が達成しようとしているのは、セクションの最後のいくつかのフィールドが完成したときにのみ、次のセクションが表示されるように、各セクションの最後のいくつかのフィールドにバインド( '変更')することです。

私は現在、各セクションのすべてのフィールドにバインドしています。したがって、ユーザーが現在のセクションの最初のフィールドだけを変更した場合は、次のセクションが表示されます。最後のフィールドまたは最後のフィールドから最後のフィールドまでが完了してから次のセクションが表示されるまでに変更したいと思います。

一般的なコード構造の例:https://jsfiddle.net/uqvhw7sb/4/

基本例:

<tab1> 
<formA> 
<groupA> 
<input a[]> 
<input a[]> 
<input a[]> 

<input b[]> 
<input b[]> 
<input b[]> 

<input c[]> 
<input c[]> 
<input c[]> 
</groupA> 

<groupB> 
<input d[]> 
<input d[]> 
<input d[]> 

<input e[]> 
<input e[]> 
<input e[]> 

<input f[]> 
<input f[]> 
<input f[]> 
</groupB> 
</formA> 
</tab1> 

<tab2> 
Same kind of thing, possible same field names 
</tab2> 

答えて

0

あなたは、コレクション内の最後の2つの要素をフィルタリングするslice(-2)を使用することができます。だから、すべてのグループをループし、そのグループ内の入力コレクションを探して

何かのように、そのコレクションをフィルタリング:

$(".fgroups").each(function(){ 
    var $group = $(this); 
    $group.find('input:checkbox').slice(-2).on("change", function() { 
     $group.next().toggle(this.checked); 
    }); 
}); 
+0

感謝。ただし、最後のチェックボックスグループの最後の2つの入力のうちの1つが変更された場合にのみトリガされます。上記の例を使ってc [0]をクリックすると、何も起こりません。 c [1]またはc [2]をクリックすると機能します。また、トグル(this.checked)について説明できますか?なぜそこにいるのか分かりません。テストでremoveClass()に置き換えました。 – Chris

+0

私はあなたが言ったことに従った...各セクションの最後の2つ...あなたはセクションを構成するものではなかった。各ボタングループの最後の2つを最初のセレクタに変更したい場合は、 – charlietfl

+0

を入力してください。フィールド(セクション)のグループとフィールドのグループ(チェックボックスの値)があることを私は認めます。あなたの例はきれいで、近いですが問題は完全に正確ではありません。しかし、それは私をうまく働く解決策に導いてくれました。ここで何をすべきかわからない.... – Chris

関連する問題