Jquery Jeśli przycisk radiowy jest zaznaczony

150

Możliwy duplikat:
sprawdzanie określonego przycisku opcji jest zaznaczone

W tej chwili mam te 2 przyciski radiowe, aby użytkownik mógł zdecydować, czy potrzebuje przesyłki w cenie, czy nie:

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

Muszę użyć Jquery, aby sprawdzić, czy przycisk opcji „tak” jest zaznaczony, a jeśli tak, wykonaj funkcję dołączania. Czy ktoś mógłby mi powiedzieć, jak bym to zrobił, proszę?

Dzięki za wszelką pomoc

edytować:

Zaktualizowałem mój kod do tego, ale to nie działa. czy robię coś źle?

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

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

});

// ]]>
</script>
Daniel H.
źródło
1
@Daniel H: Po twojej aktualizacji: działa dobrze !
Shef
To dziwne, po prostu nie działa w mojej witrynie. Przynajmniej wiem, że kod jest poprawny, spróbuję dowiedzieć się, co jest z nim nie tak, dzięki za wszystkie odpowiedzi!
Daniel H,

Odpowiedzi:

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

Albo powyższe - znowu - używając nieco mniej zbędnego jQuery:

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

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

Demo JS Fiddle .

I dalej, łagodna aktualizacja (ponieważ edytuję, aby uwzględnić Snippety, a także linki JS Fiddle), aby owinąć <input />elementy <label>s - pozwala na kliknięcie tekstu, aby zaktualizować odpowiedni <input />- i zmienić sposób tworzenia treść do dołączenia:

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>

Demo JS Fiddle .

Ponadto, jeśli chcesz tylko pokazać zawartość w zależności od tego, który element jest sprawdzony przez użytkownika, niewielka aktualizacja, która przełączy widoczność za pomocą wyraźnego pokazania / ukrycia:

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

I wreszcie, używając tylko CSS:

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

Demo JS Fiddle .

Bibliografia:

David mówi, że przywróć Monikę
źródło
3
Nie ma potrzeby sprawdzania, czy jest zaznaczone, czy nie. Inaczej nigdy nie będzie miał wartości. Marnowanie zasobów!
Shef,
22

Spróbuj tego

if($("input:radio[name=postage]").is(":checked")){
  //Code to append goes here
}
ShankarSangoli
źródło
12

Coś takiego:

if($('#postageyes').is(':checked')) {
// do stuff
}
Mrchief
źródło
3
Obiekt jQuery jest zawsze prawdziwy. Możesz $(...).lengthzamiast tego użyć .
pimvdb
Masz na myśli #postageyes:checkedczy $('#postageyes').is(':checked')?
Shef
@pimvdb Zgodnie z dokumentacją jQueryis() zwraca wartość logiczną. Więc dzwonienie .length()jest zepsute. Z dokumentacji: „W przeciwieństwie do innych metod filtrowania .is () nie tworzy nowego obiektu jQuery. Zamiast tego umożliwia testowanie zawartości obiektu jQuery bez modyfikacji”. - api.jquery.com/is
Asaph,
7
$('input:radio[name="postage"]').change(function(){
    if($(this).val() === 'Yes'){
       // append stuff
    }
});

To nasłuchuje zdarzenia zmiany na przyciskach radiowych. W momencie kliknięcia przez użytkownika Yeszdarzenie zostanie uruchomione i będziesz mógł dołączyć wszystko, co chcesz, do DOM.

Shef
źródło
6
if($('#test2').is(':checked')) {
    $(this).append('stuff');
} 
Phil
źródło
4
$("input").bind('click', function(e){
   if ($(this).val() == 'Yes') {
        $("body").append('whatever');
   }
});
geneza
źródło
Nie jestem tego pewien, ale czy nie $("#postageyes:checked"zawsze zwraca prawdę? Czy nie musiałbyś używać, .lengthaby to działało?
Phil
usunięto „lub” i wszystko po tym
genesis
3

Spróbuj tego:

if ( jQuery('#postageyes').is(':checked') ){ ... }
Justin Ethier
źródło
0
jQuery('input[name="inputName"]:checked').val()
Benzoes
źródło
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
Patrick Hund,
Rozumiem. Następna odpowiedź będzie miała.
Benjamin
0

To posłucha zmienionego wydarzenia. Próbowałem odpowiedzi od innych, ale te nie działały dla mnie i ostatecznie ten zadziałał.

$('input:radio[name="postage"]').change(function(){
    if($(this).is(":checked")){
        alert("lksdahflk");
    }
});
MS Shohan
źródło