2016-04-05 13 views
0

Unten ist mein Code, ich versuche, dynamische Elemente zu verstecken und zu zeigen. Das Problem, das ich habe, ist, ich möchte nur, dass mein verstecktes div nur eins nach dem anderen zeigt, wenn ich nur "Andere" ankreuze. Der Code unten zeigt jedoch das versteckte Div für alle #dynamicRows Ich habe. so ist es für die anfängliche erste Werk #dynamicRow hinzugefügt, das Problem ist, wenn ich zwei oder mehr #dynamicRowsVerstecken Textfeld von einem dynamischen Element anzeigen 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(); 

      }); 
     } 
    } 
}); 

Dies sind dynamische Zeilen, um Hilfe Zwecke i den HTML-Code zeige, jedoch existiert es nicht auf die Bildschirm, ein Benutzer wird auf "ADD" klicken, um den folgenden Code zu generieren. Ich habe kein Problem, dynamische Reihe zu erzeugen, und es ist nicht warum ich posten. Beachten Sie, dass der Name in meinem Optionsfeld von C# generiert wird und alles funktioniert. Das Problem besteht nicht darin, eine dynamische Zeile zu erstellen, sondern in C#.

Dynamische Reihe arbeitet man mit dem oben 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> 

Dynamische Reihe zwei nicht mit dem oben Jquery arbeiten und es nimmt die oben genannte Form Ereignisse als seine eigenen, so dass, wenn ich die Taste Radio einchecken Reihe 2, reagiert die dynamische 1. Reihe zu diesem Ereignis und umgekehrt:

<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> 
+0

IDs sollte eindeutig sein, wenn Sie IDs mehr zuweisen möchten als 1 Element Klassen verwenden. – Chris

+0

Sie müssen den Benutzer von .each() berücksichtigen. Dieser Thread kann Ihnen helfen, hoffe ich: http://stackoverflow.com/questions/18966222/jquery-each-and-attaching-click-event nur als ein Beispiel. Vermeiden Sie auch die Verwendung von ID, versuchen Sie, Elemente mithilfe von HTML-Tags auf irgendeine Weise zu identifizieren. –

+0

@Chris ich kann IDs nicht zuweisen, da das HTML ein dynamisches Formular ist und es in C# generiert wird, deshalb habe ich einen Klassenaufruf cssclass – NULL

Antwort

0

Working Example

id sollte von einer Klasse in demselben Dokument, ersetzen Sie die doppelt diejenigen eindeutig sein:

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

Auch class hinzufügen und nicht id auf die dynamischen Zeilen von C# -Code generierten:

<div class="dynamicRow"> 

Dann in Ihrem js verwenden diese Klasse:

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

Hoffe, das hilft.

+0

mein Beitrag jquery funktioniert, es ist die foreach-Schleife. Ich muss zeigen und verstecken, basierend auf dem Index, in dem ich mich gerade befinde. – NULL

+0

Was meinst du mit Arbeiten? Die Verwendung derselben ID in allen Zeilen erzeugt einen ungültigen HTML-Code und kann Fehler erzeugen. –

+0

Ich meine, es funktioniert, weil jquery Ereignis Trigger ist, wenn die erste Zeile 1 ist, auch wenn Zeile 2 ist. BTW, ich habe Klasse = Rennen und das hat auch nicht funktioniert. Grundsätzlich, wenn ich 5 Reihen von dynamischen div habe, und ich überprüfe "andere" Radio-Button, zeigt der ganze Rest des Formulars das versteckte div. – NULL

0

Versuchen Sie folgendes:

$('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

Er ist ein funktionierendes Beispiel, was Sie wollten. Ich erzeuge das benötigte nur mit js.

paar Punkte zu erwähnen

  1. Sie den Ereignis-Listener auf das übergeordnete des dynamischen Inhalt erzeugt hinzuzufügen. Verwendung von IDs
  2. vermeiden, wenn sie nicht zu gehen eindeutig sein und bevorzugt Klassen und Pseudo-Selektoren erforderlich, wenn

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

Ich habe gerade gesehen, wie Sie das Formular generiert haben, natürlich wird das funktionieren, aber ich benutze C#, um eine Sammlung von Formularfeldern zu generieren, und diese Variablen sind bereits vom System bereitgestellt und ich muss mit dem arbeiten, was ich gepostet habe. wenn ich mit js anhängen würde, dann wird es funktionieren, aber es ist nicht der Fall, danke aber. – NULL

Verwandte Themen