2017-10-03 1 views
0

ich mehrere Checkbox-Felder haben, die in der Tabelle TDs verschachtelt sind wie folgt:Finding Checkbox Attribute verschachtelten in Tabelle td die mit jQuery

<td> 
    <div class="am-checkbox ChangeCheckbox"> 
     <input id="check20" type="checkbox" checked="checked"> 
     <label for="check10"> </label> 
    </div> 
</td> 

Nun sind alle anderen Kontrollkästchen auch gleiche Struktur haben .... Nun, was ich d mögen hier zu tun ist, ein Klick-Ereignis auslösen, die den Zustand der Kontrollkästchen zu ändern und überprüfen/deaktivieren sie es, wenn es auf sie geklickt ...

Was ich hier über jQuery getan ist wie folgt:

$(document).on("click", ".ChangeCheckbox", function() { 
    // $('#check20').attr('checked', false); 
    // console.log($(this).closest("tr")); 
    // console.log($(this).closest("tr").find('td:eq(2)')); 
    $(this).closest("tr").find('td:eq(2)').attr('checked', false); 
}); 

Ich versuche, eine Zeile zu finden, die das Ereignis ausgelöst hat, und dann ist es Spalte Nr. 2 (eq (2)) und das ist die Spalte, wo das Kontrollkästchen platziert ist ...

Jetzt ist das einzige Problem hier, dass ich nicht wissen, wie sie zu lösen, wie greife ich auf die Eingabe Checkbox Typen nach dem zweiten Spalte wie folgt gewählt:

// how to select now the checkbox and set it's attribute to unchecked? 
$(this).closest("tr").find('td:eq(2)') 

Kann mir jemand helfen?

+0

@Tushar Ich habe es hinzugefügt, es ist in der Onclick-Ereignis ... – User987

+0

Warum nicht Klasse verwenden anstatt in einer Zeile zu finden? –

+1

'$ (dies) .closet (" tr "). Find ('td: eq (2)') .find (": checkbox ") .attr (" geprüft ", falsch)' https: //api.jquery .com/checkbox-selector/ –

Antwort

1

Sie :checkbox Pseudo-Selektor verwenden können. http://api.jquery.com/checkbox-selector

In Ihrem Fall wäre dies:

$(this).closest("tr") 
     .find('td:eq(2)') 
     .find(":checkbox").att‌​r("checked", false); 

bearbeiten

So zu wechseln, ist es am einfachsten, die Checkbox zuerst bekommen und dann nur ! gegen den aktuellen Wert verwenden:

var chk = $(this).closest("tr") 
       .find('td:eq(2)') 
       .find(":checkbox"); 

chk.prop("checked", !chk.prop("checked")); 

(wir sollten Checkbox verwenden .prop geprüft, nicht .attr)

Die nächste Ausgabe finden Sie besteht darin, dass, wenn Sie das Kontrollkästchen direkt klicken sie nicht ändert - weil das Kontrollkästchen und die den Klick tr erhalten Ereignisse, die jeweils aufgehoben werden. Sie müssen das Häkchen in der Checkbox abbrechen.

+0

Das ist es, funktioniert wie ein Charme! =) – User987

+0

Hey Freiheit, wie würde ich das jetzt mit einer if-Anweisung kombinieren, um zu sehen, ob das Kontrollkästchen aktiviert ist, wenn nicht, würde ich es einfach abwählen, ansonsten überprüfe es? – User987

+1

Sie meinen, Sie möchten den Wert umschalten?Ich habe mich gefragt, warum du es immer getan hast. Ich füge eine Änderung hinzu. –

1

Verwenden parents wie folgt aus:

$(this).parents("tr:first").find('td:eq(2) > input[type="checkbox"]').attr('checked', false); 
+0

'wie greife ich auf die Eingabe-Checkbox zu '- das [hat] die Frage nicht beantwortet –

+0

Sorry @ freedom-m, ich habe vergessen, die Antwort für' checkbox' zu aktualisieren. Ich habe es gerade aktualisiert. –

+0

Warum haben Sie den 'engsten (" tr ")' zu 'eltern (" tr: first ")'? –

Verwandte Themen