jQuery $ (“# radioButton”). seçim (…) seçimi kaldırma sırasında tetiklenmiyor


172

Yaklaşık bir ay önce Mitt'in sorusu cevapsız kaldı. Ne yazık ki, şimdi aynı duruma giriyorum.

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

Durum şu: Bir radyo düğmesindeki değişiklikleri yakalamak için jQuery kullanıyorum. Radyo düğmesi seçildiğinde bir düzenleme kutusunu etkinleştiririm. Radyo düğmesinin seçimi kaldırıldığında, düzenleme kutusunun devre dışı bırakılmasını istiyorum.

Etkinleştirme çalışmaları. Ben gruptaki farklı bir radyo düğmesini seçtiğinizde, changeolay olduğunu değil ateş etti. Bunu nasıl düzeltebileceğini bilen var mı?

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

mevcut kodunuz sadece radyo düğmesindeki değişikliği dinleyecektirid=r1
Rafay

1
id = r2 seçilirse, id = r1 seçimi kaldırılsın mı? bir radyo düğmesinin seçimi kaldırılıyor mu?
antwarpes


RemoveAttr ('devre dışı') kullanmayın, durumu değiştirmek için prop () kullanın, cevabımı görün .
basic6

Yanıtlar:


311

Gibi görünüyor change()Eğer bunu işaretlemeden zaman, bir radyo düğmesi kontrol ederken işlevi yalnızca denir. Kullandığım çözüm, change olayını her radyo düğmesine bağlamaktır:

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

Veya tüm radyo düğmelerine aynı adı verebilirsiniz:

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

İşte çalışan bir jsfiddle örneği (Chris Porter'ın yorumundan güncellendi.)

@ Ray'in yorumuna göre, .içinde isimler kullanmaktan kaçınmalısınız . Bu adlar jQuery 1.7.2'de çalışır, ancak diğer sürümlerde çalışmaz ( jsfiddle örneği. ).


JsFiddle çözümü jQuery yerine Mootools olarak ayarlanır ve çalışmasını engeller. Davranışı görmek için bu çözümü deneyin: jsfiddle.net/N9tBx . Bir değişiklik günlüğü ekledim ve kontrol edilen radyo düğmesi başka bir kontrol edildiğinde işaretlenmediğinde değişiklik etkinliğinin tetiklenmediğini kolayca görebilirsiniz.
Chris Porter

3
"[Name = someRadioGroup]" sözdizimi yanlış. Doğru sözdizimi: "input [name = someRadioGroup]: radio". Ayrıca, bu yöntemin sadece JQuery 1.7.2 sürümünde çalıştığını belirtmek gerekir. Bunun için bir hata gönderildi. Merak ediyorsanız bu hatanın bir örneği için jsfiddle.net/zn7q2/2 adresine bakın .
Ray

@Ray: Hata yalnızca içinde noktalı isimler için oluşur. O cezayı çalışır nokta olmadan, bkz jsfiddle.net/zn7q2/4
Andomar

1
"İnput [name = 'DateSearchOptions.Test']" (tek tırnaklar arasında yer alan ad) olarak değiştirirseniz, örnek noktalarla çalışır: jsfiddle.net/4hTxn
Nullpo 23:13

Kod "if ($ (" # myCheckbox "). Attr (" işaretli "))" Benim için çalışmadı, "($ (" # myCheckbox "). (": İşaretli ") )".
Bartho Bernsmann

35
<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 bölümü

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

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

işte DEMO


Bu, doğru olarak işaretlenmiş diğerlerinden farklı olarak çalışır: S
William Contestabile

+1. Andomar'ın çözümü işe yaradı ama bu benim için daha anlamlı. Sınıf seçiciyi kullanmak, form değişirse veya dinamik sayıda alan varsa işlevi değiştirmek zorunda kalmaz. Necro oyları için Yay! (şimdi 2 yıl sonra jQuery pervane kullanılmasını önerir rağmen () yerine attr (). api.jquery.com/prop )
Travis

8
Değişmelidir .attr('checked')için .prop('checked').
Justin


22

Tüm radyo düğmelerine aynı anda adıyla bağlanabilirsiniz:

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

Burada çalışma örneği: http://jsfiddle.net/Ey4fa/


Bunun bir varyasyonu $ ("form girişi: radyo"). Change (...); ve belirli radyo düğmesi durum desteğini test edin ('işaretli'). ASP.NET'te dinamik bir RadioButtonList kullanırken bu çok kullanışlıdır.
Terence Golla

5

Bu normalde benim için çalışıyor:

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


3

Sorunum benzerdi ve bu benim için çalıştı:

$('body').on('change', '.radioClassNameHere', function() { ...

0

Bu radyo düğmelerinin divkimliğe sahip radioButtonsolduğunu ve radyo düğmelerinin aynı ada sahip olduğunu varsayalım (örneğin commonName):

$('#radioButtons').on('change', 'input[name=commonName]:radio', function (e) {
    console.log('You have changed the selected radio button!');
});

0

changeDeselection ateşleyemeyen olay istenen davranıştır. Seçiciyi yalnızca tek bir radyo düğmesi yerine tüm radyo grubu üzerinde çalıştırmalısınız. Ve radyo grubunuz aynı ada sahip olmalıdır (farklı değerlerle)

Aşağıdaki kodu göz önünde bulundurun:

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

Sizinkiyle aynı kullanım örneğim var, yani belirli bir radyo düğmesi seçildiğinde bir giriş kutusu göstermek için. Olay seçim kaldırıldığında da başlatılmış olsaydı, her seferinde 2 olay alırdım.


0

Burada aynı sorun, bu iyi çalıştı:

$('input[name="someRadioGroup"]').change(function() {
    $('#r1edit:input').prop('disabled', !$("#r1").is(':checked'));
});

-1

Ajax ile benim için çalıştı:

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

Ve 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> ";

Bu OP'nin orijinal sorusuna cevap vermiyor. Burada jQuery kullanmıyorsunuz ve Javascript'i değil, kontrol mantığını işlemek için PHP kullanıyorsunuz.
Alex Mulchinock
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.