2011-01-07 16 views
0

Huge Dank für die Hilfe in diesem Thread - Click td, select radio button in jQueryÄndern Zellklasse auf Optionsfeld ändern

Aber jetzt habe ich Mühe, dass es nicht die Klasse der Zelle ändern, auch wenn ich binded habe die ' Änderung‘Trigger in jQuery wie folgt:

$("td input[type=radio]").bind('change click', function() { 

    $('td').removeClass('selected'); 
    $(this).parent('td').addClass('selected'); 

}); 

$("td").click(function() { 

    $('input:radio', this).attr('checked', true); 

}); 

Hoffnung, die Sinn macht. Wenn Sie auf das Optionsfeld klicken oder zwischen ihnen mithilfe der Tastatur wechseln, ändert sich die Klasse der Zelle problemlos. Allerdings, wenn Sie dies auslösen, indem die Zelle klicken sie nicht die Klasse ändern :(

Dank

+1

Wenn die Antworten in der vorherigen Frage hilfreich waren, sollten Sie eine akzeptieren. –

+1

Ich habe es versucht, aber ich habe noch nicht die 8-Minuten-Frist erreicht, sorry! (2 Minuten zu gehen) – Nick

Antwort

2

Weder die click oder change Ereignis wird ausgelöst, wenn Sie Attribute auf einem Element ändern.So müssen Sie es manuell auslösen.Ich bevorzuge es, so viel wie möglich zu verketten, und in diesem Fall können wir die siblings()Funkt verwenden Ion. Wie der Name schon sagt, werden alle Geschwister (in diesem Fall alle anderen <td> Elemente, die die Klasse ausgewählt haben) des aktuellen Elements ausgewählt.

Hier gehen Sie:

$("td input:radio").bind('change click', function(){ 
    $(this).parent('td').addClass('selected').siblings('.selected').removeClass('selected'); 
}); 

$("td").click(function() { 
    $('input:radio', this).attr('checked', 'checked').trigger('change'); 
}); 

Auch nach HTML-Spezifikationen, die checked Attribut nur checked als gültigen Wert. Da jedoch die meisten (wenn nicht alle) Browser dieses Attribut als booleschen Wert analysieren, wobei leer oder nicht existierend bedeutet falsch und jeder andere Wert wahr ist, wird es trotzdem funktionieren, aber ich persönlich bevorzuge es, den Spezifikationen zu folgen.

+0

Perfekt, danke! – Nick

+0

+1 (Ich hatte nicht über die Option ['trigger()'] (http://api.jquery.com/trigger/) nachgedacht, aber ich stelle fest, dass "checked" ein Boolescher Wert ist, sollte es aber auch sein entweder '.attr ('checked', true)' oder gar nicht ('.removeAttr ('checked')'). –

+1

Ich habe einen Kommentar hinzugefügt, warum ich den Wert auf * checked * setze, tue ich das selbe auch mit * selected * – mekwall

1

Versuchen Sie es mit:

$("td input:radio").bind('change click', function() { 

    $('td.selected').removeClass('selected'); 
    $(this).parent('td').addClass('selected'); 

}); 

Es scheint zu funktionieren. JS Fiddle demo

+0

Vielen Dank dafür (und die JS Fiddle-Site, sehr nützlich!), Aber es funktioniert immer noch nicht für mich, hmm - muss ein widersprüchlicher Code sein! Will hineinschauen. – Nick

Verwandte Themen