jQuery $ ("# radioButton"). change (...) не срабатывает при отмене выбора - PullRequest
169 голосов
/ 03 марта 2011

Около месяца назад вопрос Митта остался без ответа.К сожалению, сейчас я сталкиваюсь с той же ситуацией.

http://api.jquery.com/change/#comment-133939395

Вот ситуация: я использую jQuery для захвата изменений в переключателе.Когда выбран переключатель, я включаю поле редактирования.Когда переключатель выключен, я бы хотел, чтобы поле редактирования было отключено.

Включение работает.Когда я выбираю другой переключатель в группе, событие change срабатывает , а не .Кто-нибудь знает как это исправить?

<input type="radio" id="r1" name="someRadioGroup"/> 

<script type="text/javascript">
    $("#r1").change(function () {
        if ($("#r1").attr("checked")) {
            $('#r1edit:input').removeAttr('disabled');
        }
        else {
            $('#r1edit:input').attr('disabled', true);
        }
    });
</script>

Ответы [ 9 ]

308 голосов
/ 03 марта 2011

Похоже, что функция change() вызывается только при проверке переключателя, а не при снятии флажка.Решение, которое я использовал, - привязать событие изменения к каждой радиокнопке:

$("#r1, #r2, #r3").change(function () {

Или вы можете присвоить всем радиокнопкам одно и то же имя:

$("input[name=someRadioGroup]:radio").change(function () {

Вот рабочий Пример jsfiddle (обновлено из комментария Криса Портера.)

За комментарий @ Ray, вы должны избегать использования имен с . в них.Эти имена работают в jQuery 1.7.2, но не в других версиях ( пример jsfiddle. ).

34 голосов
/ 03 марта 2011
<input id='r1' type='radio' class='rg' name="asdf"/>
<input id='r2' type='radio' class='rg' name="asdf"/>
<input id='r3' type='radio' class='rg' name="asdf"/>
<input id='r4' type='radio' class='rg' name="asdf"/><br/>
<input type='text' id='r1edit'/>                  

JQuery часть

$(".rg").change(function () {

if ($("#r1").attr("checked")) {
            $('#r1edit:input').removeAttr('disabled');
        }
        else {
            $('#r1edit:input').attr('disabled', 'disabled');
        }
                    });

вот это ДЕМО

22 голосов
/ 03 марта 2011

Вы можете привязать все переключатели одновременно по имени:

$('input[name=someRadioGroup]:radio').change(...);

Рабочий пример здесь: http://jsfiddle.net/Ey4fa/

5 голосов
/ 30 ноября 2013

У меня это нормально работает:

if ($("#r1").is(":checked")) {}

3 голосов
/ 27 февраля 2015

Моя проблема была похожа, и у меня это сработало:

$('body').on('change', '.radioClassNameHere', function() { ...
0 голосов
/ 25 мая 2017

Та же проблема здесь, это работало просто отлично:

$('input[name="someRadioGroup"]').change(function() {
    $('#r1edit:input').prop('disabled', !$("#r1").is(':checked'));
});
0 голосов
/ 22 апреля 2017

Событие change, не запускаемое при отмене выбора, является желаемым поведением.Вы должны запустить селектор по всей группе радиостанций, а не только по одной радиокнопке.И ваша радиогруппа должна иметь одно и то же имя (с разными значениями)

Рассмотрим следующий код:

$('input[name="job[video_need]"]').on('change', function () {
    var value;
    if ($(this).val() == 'none') {
        value = 'hide';
    } else {
        value = 'show';
    }
    $('#video-script-collapse').collapse(value);
});

У меня такой же вариант использования, как и у вас, т. Е. Для отображения поля ввода, когда конкретныйпереключатель выбран.Если бы событие происходило и при отмене выбора, я получал бы 2 события каждый раз.

0 голосов
/ 10 октября 2016

С Ajax, у меня сработало:

Html:

<div id='anID'>
 <form name="nameOfForm">
            <p><b>Your headline</b></p>
            <input type='radio' name='nameOfRadio' value='seed' 
             <?php if ($interviewStage == 'seed') {echo" checked ";}?> 
            onchange='funcInterviewStage()'><label>Your label</label><br>
 </form>
</div>

Javascript:

 function funcInterviewStage() {

                var dis = document.nameOfForm.nameOfRadio.value;

                //Auswahltafel anzeigen
                  if (dis == "") {
                      document.getElementById("anID").innerHTML = "";
                      return;
                  } else { 
                      if (window.XMLHttpRequest) {
                          // code for IE7+, Firefox, Chrome, Opera, Safari
                          xmlhttp = new XMLHttpRequest();
                      } else {
                          // code for IE6, IE5
                          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                      }
                      xmlhttp.onreadystatechange = function() {
                          if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                              document.getElementById("anID").innerHTML = xmlhttp.responseText;
                          }
                      }
                      xmlhttp.open("GET","/includes/[name].php?id="+dis,true);
                      xmlhttp.send();
                  }
              }  

И php:

//// Get Value
$id = mysqli_real_escape_string($db, $_GET['id']);

//// Insert to database
$insert = mysqli_query($db, "UPDATE [TABLE] SET [column] = '$id' WHERE [...]");

//// Show radio buttons again
$mysqliAbfrage = mysqli_query($db, "SELECT [column] FROM [Table] WHERE [...]");
                  while ($row = mysqli_fetch_object($mysqliAbfrage)) {
                    ...
                  }
                  echo" 
                  <form name='nameOfForm'>
                      <p><b>Your headline</b></p>
                      <input type='radio' name='nameOfRadio' value='seed'"; if ($interviewStage == 'seed') {echo" checked ";} echo" onchange='funcInterviewStage()'><label>Yourr Label</label><br>
                      <input type='radio' name='nameOfRadio' value='startup'"; if ($interviewStage == 'startup') {echo" checked ";} echo" onchange='funcInterviewStage()'><label>Your label</label><br>

                  </form> ";
0 голосов
/ 06 ноября 2014

Допустим, эти переключатели находятся внутри div с идентификатором radioButtons, и что переключатели имеют одинаковое имя (например, commonName), тогда:

$('#radioButtons').on('change', 'input[name=commonName]:radio', function (e) {
    console.log('You have changed the selected radio button!');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...