2016-04-05 21 views
0

以下は私のコードです。私は動的要素を隠して表示しようとしています。私が抱えている問題は、「他人」だけをチェックすると、私の隠されたdivが一度に1つしか表示されないようにすることです。ただし、下のコードは、私が持っている#dynamicRowsのすべての番号のための隠しdivを表示します。私は2つ以上の#dynamicRows動的要素からテキストボックスを非表示にするjQuery c#

$('#dynamicRow').on('click', 'input[id^=race]', function() { 
    if ($(this).is(":checked")) { 
     if ($(this).val() == "Other") { 
      $(".cssclass").each(function (index) {      
       $(this).closest("div").show(); 
      }); 

     } 
     else { 
      $(".cssclass").each(function() { 
       $(this).closest("div").hide(); 

      }); 
     } 
    } 
}); 

以下は、私はhtmlコードを示していたヘルプ目的のための動的行が、ある、しかし、それは上に存在しないを持っているときに、それは追加の初期第一#dynamicRowのために働く、問題があります画面では、ユーザーは「追加」をクリックして下のコードを生成します。私は動的行を生成する上で問題はなく、なぜ私が転記しているのではないのですか?私のラジオボタンの名前はC#によって生成され、すべてが機能することに注意してください。ここでも問題は動的行を作成する方法ではなく、C#でうまく処理されています。

1は、jQueryの上記で動作する動的な行:2は、上記のjqueryのでは動作しませんし、私はラジオボタンをチェックするので、もしそれが、自身のとして上記フォームイベントを取る

<div id="dynamicRow"> 
    <input type="radio" value="No" id="race[]" name="Person[hhhhhh].race"> No: 
    <input type="radio" value="Other" id="race[]" name="Person[hhhhhh].race"> Other: 

    <div id="iamhidden" class="cssclass"> 
     I appear one at a time, when other radio button is checked 
    </div>  
</div> 

動的な行は、行2、第1動的な行は、イベントおよびその逆に応答:

+0

必要なIDは、一意である必要がある場合は、クラスと擬似セレクタを好みます1要素使用クラスよりも – Chris

+0

.each()のユーザーを考慮する必要があります。このスレッドは私が望むように役立つかもしれません:http://stackoverflow.com/questions/18966222/jquery-each-and-attaching-click-event例として。また、idを使用しないで、htmlタグを使用して要素を識別する方法もあります。 –

+0

@Chris htmlが動的なフォームであり、それがc#で生成されているためにidsを割り当てることができません。なぜなら、私はクラスコールcssclassを持っているからです。 – NULL

答えて

0
<div id="dynamicRow"> 
    <input type="radio" value="No" id="race[]" name="Person[hhhhh].race"> No: 
    <input type="radio" value="Other" id="race[]" name="Person[hhhhh].race"> Other: 

    <div id="iamhidden" class="cssclass"> 
     I appear one at a time, when other radio button is checked 
    </div>  
</div> 

Working Example

idは、同じ文書内で一意であるクラスで重複するものを置き換える必要があります。

<input type="radio" value="No" class="race" name="Person[hhhhhh].race"> No: 
<input type="radio" value="Other" class="race" name="Person[hhhhhh].race"> Other: 

はまた、あなたのC#のコードによって生成された動的な行にclassなくidを追加します。

<div class="dynamicRow"> 

その後、あなたにjsはこのクラスを使用します:

$(".cssclass").hide(); 
$('.dynamicRow').on('click', '.race', function() { 
    if ($(this).val() == "Other") { 
     $(this).next(".cssclass").show(); 
    } else { 
     $(this).nextAll(".cssclass").hide(); 
    } 
}); 

これが役に立ちます。

+0

投稿されたjquery作品は、foreachループです。私は現在表示されているインデックスに基づいて表示と非表示を切り替える必要があります。 – NULL

+0

作品の意味は?すべての行で同じ「id」を使用すると、無効なHTMLコードが生成され、バグが生成される可能性があります。 –

+0

jqueryイベントは、最初の行が1のときに、行が2であってもトリガーであることを意味します。btw、私はclass = raceを持ち、それも動作しませんでした。基本的に私は5行の動的divがあり、 "other"ラジオボタンをチェックすると、フォームの残りの部分にはhidden divが表示されます。 – NULL

0

これを試してみてください:

$('body').on('click', '#dynamicRow', function() { 
    if ($(this).find('[value=Other]').is(":checked")) { 
     $(".cssclass").each(function (index) {      
      $(this).closest("div").show(); 
     }); 
    } else { 
     $(".cssclass").each(function() { 
      $(this).closest("div").hide(); 
     }); 
    } 
}); 
0

彼は、あなたが何を望むかの実施例です。私はjsだけで必要を生成しています。

  1. を言及する

    いくつかのポイントあなたはダイナミックの親にイベントリスナーを追加したコンテンツを生成しました。

  2. IDの使用は避けてください、彼らがユニークであることを行っていない場合、あなたはそれ以上にIDを割り当てる場合

var counter = 0; 
 
function addNewEntry(){ 
 
    ++counter; 
 
    var str = '<div class="dynamicRow"><input type="radio" value="No" id="race[]" name="Person[hh'+counter+'].race"> No:<input type="radio" value="Other" id="race[]" name="Person[hh'+counter+'].race"> Other:<div id="iamhidden" class="cssclass"> I appear one at a time, when other radio button is checked</div> </div>'; 
 
    $('#dynamicRowContainer').append(str); 
 
    $("#dynamicRowContainer .dynamicRow:last-child .cssclass").hide() 
 
} 
 
$('#dynamicRowContainer').on('change', '.dynamicRow > input', function() { 
 
    if(this.value=="Other"){ 
 
     $(this).siblings('.cssclass').show(); 
 
    }else{ 
 
     $(this).siblings('.cssclass').hide(); 
 
    } 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button onclick="addNewEntry()">Add New Entry</button> 
 
<div id="dynamicRowContainer"> 
 

 
</div>

+0

私はちょうどあなたがフォームを生成する方法を見ましたが、もちろん動作しますが、私はフォームフィールドのコレクションを生成するためにC#を使用しています、これらの変数はすでにシステムによって提供されています。私はjsを使用して追加していた場合、それは動作しますが、そうではありません、ありがとう。 – NULL

関連する問題