jquery attr ("checked", "checked") ne fonctionne qu'une seule fois

j'ai un problème pour trouver la raison du comportement suivant jquery / checkbox.

$( this.obj + ' table.sgrid-content > thead > tr > th > input.select_all' ).on( 'click' , {grid:this} , function(event){

var grid = event.data.grid;

if( $(this).is(':checked') ){

    $( grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ' ).attr('checked','checked');
    $( grid.obj + ' .sgrid-content > tbody > tr > td > input.select ' ).parents('tr').addClass('ui-state-highlight');

} else {

    $( grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ' ).removeAttr('checked');
    $( grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ' ).parents('tr').removeClass('ui-state-highlight');

}

});

le code est conçu pour fonctionner comme suit:: - cliquez sur l'entrée.select_all déclenche l'événement - si l'entrée.select_all est coché: l'attribut add est coché sur toutes les cases marquées as .sélectionnez dans le tableau.drims-contenu - sinon: supprimer l'attribut "coché" de toutes les entrées.sélectionnez les articles.

encore une autre fonction de grille simple. Et il fonctionne. Le plus bizarre, c'est que ça ne marche qu'une fois. Je veux dire, vous pouvez sélectionner toutes les cases à cocher et les désélectionner. Après cette opération, la fonction" Select all " cesse de fonctionner.

une autre chose étrange est que, quand je vérifie les éléments dom avec firebug, ils sont tous cochés = 'checked' attr comme ils devraient, mais ils s'affichent et se comportent comme ils n'ont pas été cochés.

les sélecteurs fonctionnent comme il se doit. La partie du code avec Ajouter / Supprimer ui-state-highlight fonctionne tout le temps.

Mot de explenation: grille - est l'objet que je passe pour obtenir la grille.obj ( essentiellement l'ID d'un ceratain div )

Merci de me donner votre avis.

25
demandé sur Marek Musielak 2013-03-07 12:40:03

2 réponses

Utiliser prop('checked', vrai / faux) au lieu de removeAttr

$('input[name=foo]').prop('checked', true);
$('input[name=foo]').prop('checked', false);
71
répondu Marek Musielak 2013-03-07 08:44:10

Vous pouvez changer l'attribut, et cela changera aussi la propriété, si l'élément n'est pas touché. Une fois que l'élément quitte cet état initial, changer l'attribut n'affecte plus la propriété. Le comportement exact varie probablement entre les navigateurs.

Instead of .attr('checked', 'cheked') use .prop('checked', true)

0
répondu Suraj 2016-10-17 09:20:39