Jquery trouve une case à cocher dans une ligne de la table

Mon html

1895171 

comment utiliser Jquery pour savoir si la case à cocher de cette ligne est cochée ou non. Supposons que je connaisse l’unique rowId.

Actuellement, je le fais

 var checkbox = $('#' + rowId + " td input:checkbox"); if (checkbox.checked) { alert("checked"); } else { alert("unchecked"); } 

Mais cela ne semble pas détecter le moment où la case à cocher est cochée.

Curieusement, les éléments suivants n’ont pas fonctionné non plus:

  var curRow = $('#' + curRowId); var checkbox = $(curRow).find('input:checkbox').eq(0); if (checkbox.checked) { alert("checked"); } else { alert("unchecked"); } 

Tu peux le faire:

 var isChecked = $("#rowId input:checkbox")[0].checked; 

Cela utilise un sélecteur de descendant pour la case à cocher, puis obtient l’élément DOM brut et examine sa propriété checked .

Références pour les sélecteurs:

  • Sélecteurs pris en charge par la plupart des navigateurs: CSS 2.1
  • Nouveaux sélecteurs pris en charge par certains navigateurs et par diverses bibliothèques JavaScript (pour interagir avec le DOM): Sélecteurs CSS3

Mis à jour:

 var rowId = ""; var checked = $("#" + rowId + " input:checkbox")[0].checked; 

Votre code d’origine ne fonctionne pas car vous appelez checked sur un jeu de résultats jQuery. Vous devez extraire l’élément DOM réel, ce que vous pouvez faire en appelant get() (ou en indexant directement l’object comme dans la réponse de TJ). Comme il n’y a qu’un seul résultat, vous voulez que l’élément soit indexé à 0 dans le jeu de résultats.

Modifier après avoir vu le code mis à jour dans l’OP:

L’utilisation de eq() réduit les éléments correspondants à celui de l’index spécifié . Effectivement, cela retournera un ensemble de résultats jQuery avec un object correspondant, celui que vous avez demandé à l’index spécifié. Il ne renvoie toujours pas d’élément DOM dont vous devez utiliser la propriété checked .

Si vous n’avez qu’une case à cocher par ligne, c’est le moyen le plus rapide.

 !!$('#rowId input:checked').length 

Vous pouvez également omettre le !! et vérifier contre ‘> 0’ mais je pense que le !! est en fait plus rapide

Cela le ferait

 var checked = $("#rowId" + rowId + " td.classID input:checkbox").is(":checked");