Jquery Radyo düğmesi işaretliyse


150

Olası Çoğaltma:
Belirli radyo düğmesinin kontrolü işaretlenir

Şu anda bu 2 radyo düğmesi var, böylece kullanıcı fiyata dahil posta gerek olup olmadığına karar verebilir:

<input type="radio" id="postageyes" name="postage" value="Yes" /> Yes
<input type="radio" id="postageno" name="postage" value="No" /> No

'Evet' radyo düğmesinin işaretli olup olmadığını kontrol etmek için Jquery kullanmam gerekiyor ve eğer varsa, bir ekleme işlevi yapın. Birisi bana bunu nasıl yapacağımı söyleyebilir mi lütfen?

Herhangi bir yardım için teşekkürler

Düzenle:

Kodumu bu şekilde güncelledim, ancak çalışmıyor. Yanlış bir şey mi yapıyorum?

<script type='text/javascript'>
// <![CDATA[
jQuery(document).ready(function(){

$('input:radio[name="postage"]').change(function(){
    if($(this).val() == 'Yes'){
       alert("test");
    }
});

});

// ]]>
</script>

1
@Daniel H: Güncellemenizde: gayet iyi çalışıyor !
Shef

Bu garip, sadece web sitemde çalışmıyor. En azından kodun doğru olduğunu biliyorum, neyin yanlış olduğunu bulmaya çalışacağım, tüm cevaplar için teşekkürler!
Daniel H

Yanıtlar:


285
$('input:radio[name="postage"]').change(
    function(){
        if ($(this).is(':checked') && $(this).val() == 'Yes') {
            // append goes here
        }
    });

Veya, yukarıdaki - tekrar - biraz daha az gereksiz jQuery kullanarak :

$('input:radio[name="postage"]').change(
    function(){
        if (this.checked && this.value == 'Yes') {
            // note that, as per comments, the 'changed'
            // <input> will *always* be checked, as the change
            // event only fires on checking an <input>, not
            // on un-checking it.
            // append goes here
        }
    });

Gözden geçirilmiş (bazı geliştirilmiş) jQuery:

// defines a div element with the text "You're appendin'!"
// assigns that div to the variable 'appended'
var appended = $('<div />').text("You're appendin'!");

// assigns the 'id' of "appended" to the 'appended' element
appended.id = 'appended';

// 1. selects '<input type="radio" />' elements with the 'name' attribute of 'postage'
// 2. assigns the onChange/onchange event handler
$('input:radio[name="postage"]').change(
    function(){

        // checks that the clicked radio button is the one of value 'Yes'
        // the value of the element is the one that's checked (as noted by @shef in comments)
        if ($(this).val() == 'Yes') {

            // appends the 'appended' element to the 'body' tag
            $(appended).appendTo('body');
        }
        else {

            // if it's the 'No' button removes the 'appended' element.
            $(appended).remove();
        }
    });

JS Fiddle demosu .

Ve ayrıca, hafif bir güncelleme (snippet'leri ve JS Fiddle bağlantılarını içerecek şekilde düzenlediğimden beri), <input />öğeleri <label>s ile sarmak için - ilgili metni güncellemek için metnin tıklanmasına izin ver <input />- ve oluşturma araçlarını değiştir eklenecek içerik:

var appended = $('<div />', {
  'id': 'appended',
  'text': 'Appended content'
});
$('input:radio[name="postage"]').change(function() {
  if ($(this).val() == 'Yes') {
    $(appended).appendTo('body');
  } else {
    $(appended).remove();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
  <input type="radio" id="postageyes" name="postage" value="Yes" />Yes</label>
<label>
  <input type="radio" id="postageno" name="postage" value="No" />No</label>

JS Fiddle demosu .

Ayrıca, yalnızca kullanıcı tarafından hangi öğenin denetlendiğine bağlı olarak içerik göstermeniz gerekiyorsa, açık bir show / hide kullanarak görünürlüğü değiştirecek küçük bir güncelleme:

// caching a reference to the dependant/conditional content:
var conditionalContent = $('#conditional'),
    // caching a reference to the group of inputs, since we're using that
    // same group twice:
    group = $('input[type=radio][name=postage]');

// binding the change event-handler:
group.change(function() {
  // toggling the visibility of the conditionalContent, which will
  // be shown if the assessment returns true and hidden otherwise:
  conditionalContent.toggle(group.filter(':checked').val() === 'Yes');
  // triggering the change event on the group, to appropriately show/hide
  // the conditionalContent on page-load/DOM-ready:
}).change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
  <input type="radio" id="postageyes" name="postage" value="Yes" />Yes</label>
<label>
  <input type="radio" id="postageno" name="postage" value="No" />No</label>
<div id="conditional">
  <p>This should only show when the 'Yes' radio &lt;input&gt; element is checked.</p>
</div>

Ve son olarak, sadece CSS kullanarak:

/* setting the default of the conditionally-displayed content
to hidden: */
#conditional {
  display: none;
}

/* if the #postageyes element is checked then the general sibling of
that element, with the id of 'conditional', will be shown: */
#postageyes:checked ~ #conditional {
  display: block;
}
<!-- note that the <input> elements are now not wrapped in the <label> elements,
in order that the #conditional element is a (subsequent) sibling of the radio
<input> elements: -->
<input type="radio" id="postageyes" name="postage" value="Yes" />
<label for="postageyes">Yes</label>
<input type="radio" id="postageno" name="postage" value="No" />
<label for="postageno">No</label>
<div id="conditional">
  <p>This should only show when the 'Yes' radio &lt;input&gt; element is checked.</p>
</div>

JS Fiddle demosu .

Referanslar:


3
Kontrol edilip edilmediğini görmeye gerek yok. Aksi halde asla değeri olmayacaktır. Kaynak israfı!
Shef

22

Bunu dene

if($("input:radio[name=postage]").is(":checked")){
  //Code to append goes here
}

12

Bunun gibi bir şey:

if($('#postageyes').is(':checked')) {
// do stuff
}

3
JQuery nesnesi her zaman doğrudur. Bunun $(...).lengthyerine kullanmak isteyebilirsiniz .
pimvdb

Yani #postageyes:checkedya $('#postageyes').is(':checked')?
Shef

@pimvdb jQuery belgelerineis() göre, bir boole döndürür. Yani arama .length()bozuldu. Dokümanlardan: "Diğer filtreleme yöntemlerinin aksine, .is () yeni bir jQuery nesnesi oluşturmaz. Bunun yerine, bir jQuery nesnesinin içeriğini değiştirmeden test etmenizi sağlar." - api.jquery.com/is
Asaph

7
$('input:radio[name="postage"]').change(function(){
    if($(this).val() === 'Yes'){
       // append stuff
    }
});

Bu, radyo düğmelerinde bir değişiklik olayı dinler. Kullanıcı tıkladığında Yesetkinlik tetiklenir ve DOM'a istediğiniz her şeyi ekleyebilirsiniz.


6
if($('#test2').is(':checked')) {
    $(this).append('stuff');
} 

4
$("input").bind('click', function(e){
   if ($(this).val() == 'Yes') {
        $("body").append('whatever');
   }
});

Bundan çok emin değilim, ama $("#postageyes:checked"her zaman doğru olmayacak mı? .lengthÇalışması için kullanmak zorunda kalmaz mıydınız?
Phil

kaldırıldı "veya" ve bundan sonraki her şey
genesis


0
jQuery('input[name="inputName"]:checked').val()

Bu kod pasajı soruyu çözebilirken, bir açıklama da dahil olmak üzere , yayınınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
Patrick Hund

Anladım. Bir sonraki cevapta bir tane olacak.
Benjamin

0

Bu, değişen etkinliği dinleyecektir. Başkalarının cevaplarını denedim ama bunlar benim için işe yaramadı ve sonunda bu işe yaradı.

$('input:radio[name="postage"]').change(function(){
    if($(this).is(":checked")){
        alert("lksdahflk");
    }
});
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.