2017-02-02 3 views
3

Ich habe den folgenden HTML-Code:JQuery ermöglichen nur Taste mit Wert True

<button type="button" class="btn btn-primary jumbotron-td-enable-button enb btnEnable" value="<%= enables[i]%>"> 
    Enable 
</button> 

Diese Taste wird durch dynamisches Ziehen Daten über JSON-Datei gerendert daher habe ich den folgenden Wert value="<%= enables[i] %>

Hier ist mein javascript:

$(".btnEnable").each(function() { 
    var isEnable = $(this).val(); 
    if (isEnable == 'FALSE') { 
     $(".enb").attr("disabled", true); 
    } 
}); 

Mein Problem ist, dass es funktioniert das alles von der Taste, zum Beispiel der Wert der Taste ist wie folgt:

FALSE 
TRUE 
TRUE 
FALSE 

Also ich möchte nur die FALSE-Taste deaktiviert werden. Ich habe versucht, ID zu verwenden, und es tut, was ich will, aber das Problem ist, dass es nur den ersten FALSCH Wert bekommen und nicht die anderen

Antwort

2

Das Problem ist, weil $('.enb') wird alle Schaltflächen auswählen. Stattdessen sollten Sie das Schlüsselwort this innerhalb des Aufrufs each() verwenden, um auf die aktuelle Schaltfläche in der Iteration zu verweisen. Versuchen Sie folgendes:

$(".btnEnable").each(function() { 
    var isEnable = $(this).val(); 
    $(this).prop("disabled", isEnable == 'FALSE'); 
}); 

Beachten Sie die Verwendung von prop() hier, wie Sie einen Booleschen Wert liefern, die isEnable für entweder Zustand arbeiten, dh Sie können die if Zustand entfernen können.

1

können Sie ersetzen .enb mit $(this)

.enb werden alle Elemente auswählen entsprechen. $(this) wählt nur den aktuellen in der Schleife aus.

$(".btnEnable").each(function() { 
    var isEnable = $(this).val(); 
    if (isEnable == 'FALSE') { 
     $(this).attr("disabled", "disabled"); 
     //$(this).prop("disabled", true); 
    } 
}); 
2

Sie sind fast da - Sie haben den Wert der aktuellen Taste

$(this).val(); 

Der wichtige Faktor ist „this“. Es bezieht sich auf das Element, das Gegenstand der aktuellen Iteration der .each-Schleife ist.

So die deaktivierte Eigenschaft ändern nur die aktuelle Taste, gilt das gleiche Prinzip:

$(".enb").attr("disabled", true); 

$(this).attr("disabled", true); 

Mit dem .enb Wähler werden soll, wird, wie Sie bemerkt haben, deaktivieren alle Knöpfe, die die Klasse "enb" haben.

es weiter zu verfeinern, die Dokumentation jQuery schlägt vor, Sie .prop() verwenden, anstatt .attr() Eigenschaften dieser Art einstellen (Ihre jQuery-Version unter der Annahme,> = 1,6)

$(this).prop("disabled", true);