Cara mengatur ulang tombol radio di jQuery sehingga tidak ada yang dicentang


136

Saya memiliki tombol radio dalam HTML seperti ini:

<td>
    <input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
    <input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
    <input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
    <input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
</td>

Ini ada dalam tag formulir, dan ketika pengguna mengirimkan formulir, saya ingin membuat semua tombol radio kembali ke default. Artinya tidak ada yang diperiksa.

Saya memiliki kode ini tetapi memberikan kesalahan mengatakan [0] is null or not an object

$('input[@name="correctAnswer"]')[0].checked = false;
$('input[@name="correctAnswer"]')[1].checked = false;
$('input[@name="correctAnswer"]')[2].checked = false;
$('input[@name="correctAnswer"]')[3].checked = false;

Saya melakukan ini di IE 6.


Jika jawaban @ lambacck tidak berhasil untuk Anda, lihat pelacak bug di situs JQuery [ bugs.jquery.com/ticket/10910] . Jika Anda (seperti saya ...) melakukan perulangan melalui serangkaian tombol radio untuk mencoba mengatur ulang semuanya ke nilai default, #(selector).prop('checked',true);gagal saat diikuti dengan mencoba menyetel tombol radio berikutnya dalam grup yang sama ke status yang tidak dicentang. Triknya adalah dengan hanya menyetel tombol radio ke status yang dicentang dan membiarkan grup tombol radio melakukan apa yang dilakukannya (hapus centang yang lain ...) . Selain itu, panggilan $(selector).click();berfungsi, dan akan mengaktifkan acara asosiasi apa pun.
Cos Callis

Jawaban:


270

Dalam versi jQuery sebelum 1.6 digunakan:

$('input[name="correctAnswer"]').attr('checked', false);

Dalam versi jQuery setelah 1.6, Anda harus menggunakan:

$('input[name="correctAnswer"]').prop('checked', false);

tetapi jika Anda menggunakan 1.6.1+ Anda dapat menggunakan formulir pertama (lihat catatan 2 di bawah).

Catatan 1: Penting bahwa argumen kedua salah dan bukan "salah" karena "salah" bukanlah nilai yang salah. yaitu

if ("false") {
    alert("Truthy value. You will see an alert");
}

Catatan 2: Pada jQuery 1.6.0, sekarang ada dua metode serupa, .attrdan .propitu melakukan dua hal yang terkait tetapi sedikit berbeda. Jika dalam kasus khusus ini, saran yang diberikan di atas berfungsi jika Anda menggunakan 1.6.1+. Di atas tidak akan berfungsi dengan 1.6.0, jika Anda menggunakan 1.6.0, Anda harus meningkatkan. Jika Anda menginginkan detailnya, teruslah membaca.

Rincian: Ketika bekerja dengan elemen HTML DOM lurus, ada sifat yang melekat pada elemen DOM ( checked, type, value, dll) yang menyediakan sebuah antarmuka untuk negara berjalan dari halaman HTML. Ada juga .getAttribute/ .setAttributeinterface yang menyediakan akses ke nilai Atribut HTML seperti yang disediakan di HTML. Sebelum 1.6 jQuery mengaburkan perbedaan dengan menyediakan satu metode .attr,, untuk mengakses kedua jenis nilai. jQuery 1.6+ menyediakan dua metode, .attrdan .propuntuk membedakan antara situasi ini.

.propmemungkinkan Anda menyetel properti pada elemen DOM, sementara .attrmemungkinkan Anda menyetel nilai atribut HTML. Jika Anda bekerja dengan DOM biasa dan menyetel properti yang dicentang elem.checked,, ke trueatau falseAnda mengubah nilai yang berjalan (apa yang dilihat pengguna) dan nilai yang dikembalikan melacak status di laman. elem.getAttribute('checked')namun hanya mengembalikan status awal (dan mengembalikan 'checked'atau undefinedbergantung pada status awal dari HTML). Di 1.6.1+, penggunaan .attr('checked', false)melakukan keduanya elem.removeAttribute('checked')dan elem.checked = falsekarena perubahan tersebut menyebabkan banyak masalah kompatibilitas mundur dan tidak dapat benar-benar mengetahui apakah Anda ingin menyetel atribut HTML atau properti DOM. Lihat informasi lebih lanjut dalam dokumentasi untuk .prop .


Penting untuk memberikan false daripada "false" untuk argumen kedua.
Casebash

"Salah" untuk argumen kedua penting karena argumen kedua adalah nilai yang akan ditetapkan. Jika argumen kedua kosong, itu berarti beri saya nilai elemen pertama yang cocok dengan selektor.
lambacck

1
@Noldorin - "Truthy" adalah kata yang sangat romantis. (Dapatkah Anda menyarankan cara yang lebih baik untuk mengungkapkan konsep "kebenaran" - hanya menggunakan satu kata?)
nnnnnn

Heh, mungkin cukup adil. Kita semua mungkin mengerti maksudnya, meskipun saya pribadi lebih suka yang lebih formal "jujur" atau "jujur ​​secara semantik".
Noldorin

3
@Noldorin "Truthy" dan "falsy" adalah istilah yang digunakan banyak pakar Javascript, termasuk Brendan Eich dan Douglass Crockford . Istilah kuncinya salah karena evaluasi boolean ditentukan oleh 6 nilai yang salah . Truthy adalah nama logis untuk kebalikan dari falsy. Saya pikir penggunaan falsy sengaja digunakan untuk membuat Anda berpikir bahwa ini mungkin bukan yang biasa Anda gunakan (terutama jika berasal dari bahasa sintaks gaya C lain di mana 0 salah).
lambacck

53

Cara terbaik untuk menyetel status radiobuttons di jquery:

HTML:

<input type="radio" name="color" value="orange" /> Orange 
<input type="radio" name="color" value="pink" /> Pink 
<input type="radio" name="color" value="black" /> Black
<input type="radio" name="color" value="pinkish purple" /> Pinkish Purple

Kode Jquery (1.4+) untuk memilih satu tombol sebelumnya:

var presetValue = "black";
$("[name=color]").filter("[value='"+presetValue+"']").attr("checked","checked");

Dalam kode Jquery 1.6+, metode .prop () lebih disukai:

var presetValue = "black";
$("[name=color]").filter("[value='"+presetValue+"']").prop("checked",true);

Untuk membatalkan pilihan tombol:

$("[name=color]").removeAttr("checked");

10

Masalah Anda adalah bahwa pemilih atribut tidak dimulai dengan @.

Coba ini:

$('input[name="correctAnswer"]').attr('checked', false);

4
$('#radio1').removeAttr('checked');
$('#radio2').removeAttr('checked');
$('#radio3').removeAttr('checked');
$('#radio4').removeAttr('checked');

Or

$('input[name="correctAnswer"]').removeAttr('checked');

4

Akhirnya setelah banyak pengujian, menurut saya cara yang paling nyaman dan efisien untuk melakukan preset adalah:

var presetValue = "black";
$("input[name=correctAnswer]").filter("[value=" + presetValue + "]").prop("checked",true);
$("input[name=correctAnswer]").button( "refresh" );//JQuery UI only

Penyegaran diperlukan dengan objek JQueryUI.

Mengambil nilai itu mudah:

alert($('input[name=correctAnswer]:checked').val())

Diuji dengan JQuery 1.6.1, JQuery UI 1.8.


2

Saya tahu ini sudah tua dan ini sedikit di luar topik, tetapi Andaikan Anda ingin menghapus centang hanya tombol radio tertentu dalam koleksi:

$("#go").click(function(){
    $("input[name='correctAnswer']").each(function(){
      if($(this).val() !== "1"){
        $(this).prop("checked",false);
      }
    });
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
<input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
<input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
<input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
<input type="button" id="go" value="go">

Dan jika Anda berurusan dengan daftar tombol radio, Anda dapat menggunakan: check selector untuk mendapatkan yang Anda inginkan.

$("#go").click(function(){
  $("input[name='correctAnswer']:checked").prop("checked",false);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
<input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
<input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
<input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
<input type="button" id="go" value="go">

0

Set tombol radio diperiksa melalui jquery:

<div id="somediv" >
 <input type="radio" name="enddate" value="1"  />
 <input type="radio" name="enddate" value="2"  />
 <input type="radio" name="enddate" value="3"  />
</div>

kode jquery:

$('div#somediv input:radio:nth(0)').attr("checked","checked");

0

Jika Anda ingin menghapus semua tombol radio di DOM:

$('input[type=radio]').prop('checked',false);


0
<div id="radio">
<input type="radio" id="radio1" name="radio"/><label for="radio1">Bar Chart</label>
<input type="radio" id="radio2" name="radio"/><label for="radio2">Pie Chart</label>
<input type="radio" id="radio3" name="radio"/><label for="radio3">Datapoint Chart</label>
</div>

$('#radio input').removeAttr('checked');
// Refresh the jQuery UI buttonset.                  
$( "#radio" ).buttonset('refresh');

0

Meskipun prop mengubah status yang dicentang tetapi perubahan juga menunjukkannya dalam bentuk.

$('input[name="correctAnswer"]').prop('checked', false).change();

-1

Dimana Anda memiliki: <input type="radio" name="enddate" value="1" />

Setelah nilai = "1" Anda juga bisa menambahkan unchecked =" false" />

Garis tersebut kemudian akan menjadi:

<input type="radio" name="enddate" value="1" unchecked =" false" />

1
Hei, saya pikir Anda membiarkan jawaban Anda tidak lengkap.
Amar

-2

Setel semua tombol radio kembali ke default:

$("input[name='correctAnswer']").checkboxradio( "refresh" );

Fungsi checkboxradio () tidak ditentukan di jQuery 2.x. Apakah ini ekstensi yang Anda gunakan?
justdan23

-3

Mengapa Anda tidak melakukannya:

$("#radio1, #radio2, #radio3, #radio4").checked = false;

1
Anda tidak bisa begitu saja menyetel properti yang dicentang pada larik yang dikembalikan dari panggilan jQuery, Anda harus menggunakan fungsi attr () untuk menyetel properti itu pada item di dalam larik.
bdukes

ini tidak membuat maka 'tidak dicentang'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.