変更イベントでラジオを使用するには?


486

変更イベントに2つのラジオボタンがあります。変更ボタンが必要です。どうすれば可能ですか。私のコード

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

脚本

<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>

3
条件は.. ..それは罰金を作品に転送するように変更し、「アロット」に比較して、両方の場合
Himanthクマー

私はif($("input[name='bedStatus']:checked").val() == 'allot')書くことができると信じていますif($("input[name='bedStatus']").val() == 'allot')
mplungjan '31 / 10/31

2
準備ができてカムma lagyu ho apdane。ありがとうallot thai gyu bhai。
過酷なManvar

回答:


930

this現在のinput要素を参照するwhichを使用できます。

$('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/

allotステートメントと:radioセレクターの両方が非推奨の場合は、両方で値を比較していることに注意してください。

jQueryを使用していない場合は、document.querySelectorAllおよびHTMLElement.addEventListenerメソッドを使用できます。

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);
});

入力無線をリセットして無線変更イベントをトリガーすると、実際の出力はどうなりますか?
Ashish Mehta 2017年

2
:radioセレクタは(jQueryの中)は推奨されません。
Miquel Al。Vicens

2
ただのメモ:私はその言語を理解していません。
未定義

7
@Piterdenまず第一に、この答えは6歳です!ES6では、this値を気にしないかthis、ハンドラで周囲のコンテキスト値を使用したい場合に、矢印関数が導入されていますthis。このスニペットでは、そして、通常の関数を使用することは「古い悪い習慣」であると主張することは全く意味がありません!また、古いブラウザは矢印関数の構文をサポートしていないため、古いブラウザをサポートArray#includesするにはトランスパイラとシムを使用する必要があります。矢印の関数が特に複雑なこととは何の関係もない単純な答えを作るのはなぜですか?
未定義

2
の代わりにthis、私はを使用しますevent.target
Bobort 2018

137

上記の答えの適応...

$('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


1
「オン」と上記の答えの違いは何ですか?
okenshield 2014年

3
@okenshield .on()は、上記に関連して実際に利益を得ていますが、動的セレクターを考慮すると、jQuery 1.7以降に進む唯一の方法です
Ohgodwhy

5
@Ohgodwhy- onあなたが言ったように、イベントの委任、または動的セレクターのためのコンテキストを提供するときに利益がありますが、あなたがそれを書いた方法は、上記の答えとまったく同じです。
Hugo Silva

1
スイッチを使用すると、$(this).val()を繰り返さないようにすることができます。このバージョンを優先する必要があります。
KyleK 2015年

36

よりシンプルでクリーンな方法は、@ Ohgodwhyの回答を持つクラスを使用することです。

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

脚本

$( ".rButton" ).change(function() {
    switch($(this).val()) {
        case 'allot' :
            alert("Allot Thai Gayo Bhai");
            break;
        case 'transfer' :
            alert("Transfer Thai Gayo");
            break;
    }            
});​

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フィドル


19
$(this).is(":checked")使用する代わりにthis.checked。これは純粋なJSなので、はるかに高速です。
Gh61、2013

7
@ Gh61、私は好奇心旺盛でテストを実行しました。純粋なJSははるかに高速です。
マイケルクレンショー2017

9

オンチャージ機能を使用する

<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>

7

シンプルなES6 (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>


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);
  });
});

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>

3

ラジオボタンが動的に追加される場合、これを使用することができます

$(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;
    }     
});

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");
        }
    });
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.