Bagaimana cara menggunakan radio saat perubahan acara?

486

Saya memiliki dua tombol radio pada acara perubahan. Saya ingin mengubah tombol. Bagaimana mungkin? Kode Saya

<input type="radio" name="bedStatus" id="allot" checked="checked" value="allot">Allot
<input type="radio" name="bedStatus" id="transfer" value="transfer">Transfer

Naskah

<script>
    $(document).ready(function () {
        $('input:radio[name=bedStatus]:checked').change(function () {
            if ($("input[name='bedStatus']:checked").val() == 'allot') {
                alert("Allot Thai Gayo Bhai");
            }
            if ($("input[name='bedStatus']:checked").val() == 'transfer') {
                alert("Transfer Thai Gayo");
            }
        });
    });
</script>
Ashish Mehta
sumber
3
keduanya jika kondisinya dibandingkan dengan 'allot', ubah untuk mentransfer .. berfungsi dengan baik ..
Himanth Kumar
Saya percaya if($("input[name='bedStatus']:checked").val() == 'allot')dapat ditulisif($("input[name='bedStatus']").val() == 'allot')
mplungjan
2
siap kam ma lagyu ho apdane. terima kasih membagikan thai gyu bhai.
Harsh Manvar

Jawaban:

930

Anda dapat menggunakan thisyang merujuk ke inputelemen saat ini .

$('input[type=radio][name=bedStatus]').change(function() {
    if (this.value == 'allot') {
        alert("Allot Thai Gayo Bhai");
    }
    else if (this.value == 'transfer') {
        alert("Transfer Thai Gayo");
    }
});

http://jsfiddle.net/4gZAT/

Perhatikan bahwa Anda membandingkan nilai terhadap allotkedua jika pernyataan dan :radiopemilih sudah usang.

Jika Anda tidak menggunakan jQuery, Anda dapat menggunakan document.querySelectorAlldan HTMLElement.addEventListenermetode:

var radios = document.querySelectorAll('input[type=radio][name="bedStatus"]');

function changeHandler(event) {
   if ( this.value === 'allot' ) {
     console.log('value', 'allot');
   } else if ( this.value === 'transfer' ) {
      console.log('value', 'transfer');
   }  
}

Array.prototype.forEach.call(radios, function(radio) {
   radio.addEventListener('change', changeHandler);
});
tidak terdefinisi
sumber
Jika saya mengatur ulang radio input dan memicu acara perubahan radio, apa output yang sebenarnya.?
Ashish Mehta
2
The :radiopemilih tidak ditinggalkan (di jQuery).
Miquel Al. Vicens
2
Hanya sebuah catatan: Saya tidak mengerti bahasa itu.
undefined
7
@ Piterden Pertama-tama, jawaban ini adalah 6 tahun! Fungsi panah telah diperkenalkan di ES6 untuk situasi ketika Anda tidak peduli dengan thisnilai atau Anda ingin menggunakan nilai konteks sekitarnya thisdi handler Anda, potongan ini digunakan this. Dan mengklaim menggunakan fungsi biasa adalah "praktik buruk lama" sama sekali tidak ada artinya! Juga, browser lama tidak mendukung sintaks fungsi panah dan Array#includesdan seseorang harus menggunakan transpiler dan shim untuk mendukung browser lama. Mengapa membuat jawaban sederhana yang tidak ada hubungannya dengan fungsi panah rumit?
undefined
2
Alih-alih this, saya gunakan event.target.
Bobort
137

Adaptasi dari jawaban di atas ...

$('input[type=radio][name=bedStatus]').on('change', function() {
  switch ($(this).val()) {
    case 'allot':
      alert("Allot Thai Gayo Bhai");
      break;
    case 'transfer':
      alert("Transfer Thai Gayo");
      break;
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" name="bedStatus" id="allot" checked="checked" value="allot">Allot
<input type="radio" name="bedStatus" id="transfer" value="transfer">Transfer

http://jsfiddle.net/xwYx9

Ya Tuhan kenapa
sumber
1
apa perbedaan antara menggunakan 'on' dan jawaban di atas?
okenshield
3
@okenshield .on()benar-benar mendapatkan keuntungan dalam kaitannya dengan hal di atas, namun, ketika mempertimbangkan pemilih dinamis, itu pasti satu-satunya cara untuk masuk di jQuery 1.7+
Ohgodwhy
5
@Ohgodwhy - onmemiliki keuntungan ketika Anda memberikan konteks untuk delegasi acara, atau bahkan untuk penyeleksi dinamis seperti yang Anda katakan, tetapi cara Anda menulisnya, persis sama dengan jawaban di atas.
Hugo Silva
1
Perhatikan bahwa sakelar memungkinkan Anda untuk tidak mengulangi $ (ini) .val (), Anda harus memilih versi ini.
KyleK
36

Cara yang lebih sederhana dan bersih adalah menggunakan kelas dengan jawaban @ Ohgodwhy

<input ... class="rButton">
<input ... class="rButton">

Naskah

$( ".rButton" ).change(function() {
    switch($(this).val()) {
        case 'allot' :
            alert("Allot Thai Gayo Bhai");
            break;
        case 'transfer' :
            alert("Transfer Thai Gayo");
            break;
    }            
});​
Kemarahan terhadap mesin
sumber
18
$(document).ready(function () {
    $('#allot').click(function () {
        if ($(this).is(':checked')) {
            alert("Allot Thai Gayo Bhai");
        }
    });

    $('#transfer').click(function () {
        if ($(this).is(':checked')) {
            alert("Transfer Thai Gayo");
        }
    });
});

JS Fiddle

Bromelio
sumber
19
Alih-alih $(this).is(":checked")digunakan this.checked. Ini JS murni dan jadi jauh lebih cepat.
Gh61
7
@ Gh61, saya penasaran dan menjalankan tes. JS murni jauh lebih cepat .
Michael Crenshaw
9

Gunakan fungsi onchage

<input type="radio" name="bedStatus" id="allot" checked="checked" value="allot" onchange="my_function('allot')">Allot
<input type="radio" name="bedStatus" id="transfer" value="transfer" onchange="my_function('transfer')">Transfer

<script>
 function my_function(val){
    alert(val);
 }
</script>
sandeep kumar
sumber
7

Solusi ES6 sederhana (hanya javascript) .

document.forms.demo.bedStatus.forEach(radio => {
  radio.addEventListener('change', () => {
    alert(`${document.forms.demo.bedStatus.value} Thai Gayo`);
  })
});
<form name="demo">
  <input type="radio" name="bedStatus" value="Allot" checked>Allot
  <input type="radio" name="bedStatus" value="Transfer">Transfer
</form>

Simon Arnold
sumber
6
document.addEventListener('DOMContentLoaded', () => {
  const els = document.querySelectorAll('[name="bedStatus"]');

  const capitalize = (str) =>
    `${str.charAt(0).toUpperCase()}${str.slice(1)}`;

  const handler = (e) => alert(
    `${capitalize(e.target.value)} Thai Gayo${e.target.value === 'allot' ? ' Bhai' : ''}`
  );

  els.forEach((el) => {
    el.addEventListener('change', handler);
  });
});
Piterden
sumber
3
<input type="radio" name="radio"  value="upi">upi
<input type="radio" name="radio"  value="bankAcc">Bank

<script type="text/javascript">
$(document).ready(function() {
 $('input[type=radio][name=radio]').change(function() {
   if (this.value == 'upi') {
    //write your logic here

    }
  else if (this.value == 'bankAcc') {
    //write your logic here
 }
 });
 </script>
Gupta Nambula
sumber
3

Jika tombol radio ditambahkan secara dinamis, Anda mungkin ingin menggunakan ini

$(document).on('change', 'input[type=radio][name=bedStatus]', function (event) {
    switch($(this).val()) {
      case 'allot' :
        alert("Allot Thai Gayo Bhai");
        break;
      case 'transfer' :
        alert("Transfer Thai Gayo");
        break;
    }     
});
StripyTiger
sumber
0
$(document).ready(function () {
    $('input:radio[name=bedStatus]:checked').change(function () {
        if ($("input:radio[name='bedStatus']:checked").val() == 'allot') {
            alert("Allot Thai Gayo Bhai");
        }
        if ($("input:radio[name='bedStatus']:checked").val() == 'transfer') {
            alert("Transfer Thai Gayo");
        }
    });
});
Ram Samuj
sumber