2013-04-05 5 views
11

Ho cercato di selezionare i pulsanti di opzione con jQuery, cosa che pensavo sarebbe stata semplice come cambiare l'attributo selezionato.C'è un bug con i pulsanti di opzione in jQuery 1.9.1?

Tuttavia, il seguente codice non sembra fare ciò che è previsto in jQuery 1.9.1 in Chrome/Firefox.

Comportamento prevista: Fare clic sul pulsante che include il pulsante di opzione -> l'attributo 'checked' viene impostato -> il rendering viene controllato nel DOM.

comportamento reale: Fare clic sul div che racchiude il pulsante di opzione -> 'controllati' attributo viene impostata -> visualizza controllato nel DOM per il primo e secondo pulsante cliccato, le successive pulsanti non rendano come controllato.

jQuery:

$('div.form-type-radio').on('click', function() {  
    var Id = $(this).find('input[type=radio]').attr('id'); 
    $('form input[type=radio]:not(#'+Id+')').removeAttr('checked'); 
    $('#' + Id).attr('checked', 'checked');  
    console.log($('#' + Id));  
}); 

Ecco un jsFiddle - http://jsfiddle.net/GL9gC/

Ho provato lo stesso codice con le precedenti versioni di jQuery e tutto funziona come previsto.

+1

che non ha nulla a che fare con questo, ma perché diavolo si potrebbe ottenere l'elemento , quindi l'ID e alcuni le linee sotto usano l'ID per ottenere l'elemento, ancora? ('non' funziona anche con gli elementi). La tua intera funzione potrebbe essere semplicemente '$ ('input [type = radio]', this) .prop ('checked', true);' – adeneo

+0

Questo è stato appena lasciato da qualche graffio e debug della testa, solo per essere assolutamente sicuro di averlo l'ID. – Simon

risposta

20

In questo caso, è necessario utilizzare prop() anziché attr()/removeAttr().

Ecco un lavoro jsFiddle.

jQuery:

$('div.form-type-radio').on('click', function() { 
    var Id = $(this).find('input[type=radio]').prop('id'); 
    $('form input[type=radio]:not(#'+Id+')').prop('checked'); 
    $('#' + Id).prop('checked', 'checked'); 
    console.log($('#' + Id)); 
}); 
+4

Grazie, suppongo che avrei dovuto leggere questo (jQuery docs) :: "Tuttavia, il concetto più importante da ricordare sull'attributo verificato è che non corrisponde alla proprietà checked. L'attributo corrisponde effettivamente al defaultChecked proprietà e dovrebbe essere utilizzato solo per impostare il valore iniziale della casella di controllo.Il valore dell'attributo verificato non cambia con lo stato della casella di controllo, mentre la proprietà checked.Pertanto, il modo compatibile cross-browser per determinare se una casella di controllo è controllato è di usare la proprietà " – Simon

+0

Sono impazzito dal momento che non riuscivo a capire perché attr non stesse lavorando per un progetto usando 2.1.4. Buono a sapersi. –

Problemi correlati