jquery attr (‘checked’, ‘checked’) funziona solo una volta

Ho un problema nel trovare il motivo per il seguente comportamento di 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'); } }); 

Il codice ha lo scopo di funzionare come segue: – fare clic su input.select_all triggers l’evento – se input.select_all è selezionato: aggiungi attributo selezionato a tutte le checkbox contrassegnate come .select all’interno di table.sgrid-content – in caso contrario: rimuovi il ‘checked’ ‘attributo da tutti gli elementi input.select.

Ancora un’altra semplice funzione di griglia. E funziona. La parte strana è, funziona solo una volta. Con ciò intendo, puoi selezionare tutte le caselle di controllo e deselezionarle. Dopo quell’operazione, la funzione “Seleziona tutto” smette di funzionare.

Un’altra cosa strana è che quando controllo gli elementi dom con firebug vengono tutti controllati = ‘checked’ attr come dovrebbero, ma vengono visualizzati e si comportano in quanto non sono stati controllati.

I selezionatori lavorano come dovrebbero. La parte di codice con l’aggiunta / rimozione di ui-state-highlight funziona sempre.

    Parola di explenation: grid – è l’object che passo per ottenere grid.obj (praticamente ID di un ceratain div)

    Per favore, dammi la tua opinione

    Usa prop (‘checked’, true / false) invece di removeAttr

     $('input[name=foo]').prop('checked', true); $('input[name=foo]').prop('checked', false); 

    È ansible modificare l’attributo e questo cambierà anche la proprietà, se l’elemento non è stato toccato. Una volta che l’elemento lascia questo stato iniziale, la modifica dell’attributo non influisce più sulla proprietà. Il comportamento esatto probabilmente varia tra i browser.

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