JQuery und Checkbox-Rätsel

Liebe Community, ich habe einen JavaScript-Fehler und die Lösung dazu. Allerdings suche ich noch nach der Erklärung. Die Lösung entweder per Facebook facebook.com/preishuber oder per Mail an hannesp AT ppedv.de,

Eine Website, konkret die Checkboxen in einer Tabelle, funktionieren manchmal und manchmal nicht korrekt. Die Tabelle kommt aus einem Web Server GridView Control. Dort sollen mittels einer Checkbox in der Header-Zeile alle Checkboxen in den Table Rows an bzw. abgehakt werden. Das funktioniert aber genau zweimal, nicht öfter.

Auf dem Weg zur Lösung wurde das Problem isoliert und mit identen Verhalten nachgestellt.

   1:  <asp:CheckBox ID="CheckBox1" runat="server"/><br />
   2:  <asp:CheckBox ID="CheckBox2" runat="server" /><--click
   3:  &lt;script>
   4:      $('#<%=CheckBox2.Clientid%>').click(function (args) {
   5:      $('#<%=CheckBox1.ClientID%>').attr('checked', args.target.checked);
   6:              });
   7:  </script>

 

Und in der Tat, es klappt nur einmal bzw. zweimal, je nach Ausgangsdaten. Die obere Checkbox “folgt” der unteren.

image

Erst wenn man statt attr prop verwendet, klappt es dauerhaft. image

Weder debuggen, noch HTML Source Code noch die Browser Tools haben geholfen den Fehler zu finden. Es war purer Zufall und ausprobieren. In diesem Fall war es auch nicht möglich der Suchmaschine eine vernünftige Frage zu stellen.

Also liebe Community- Warum ist das so?

[UPDATE} Stephan Hüwe weist mich auf die Doku hin

The difference between attributes and properties can be important in specific situations. Before jQuery 1.6, the .attr() method sometimes took property values into account when retrieving some attributes, which could cause inconsistent behavior. As of jQuery 1.6, the .prop() method provides a way to explicitly retrieve property values, while .attr() retrieves attributes.

Mein Statement dazu: kann man akzeptieren. Allerdings ist eine API, die nicht konsistente Ergebnisse liefert –“not well designed” wie es die Briten sagen würden.

Kommentare sind geschlossen