Jquery Якщо встановлено прапорець


150

Можливий дублікат:
Перевіряється конкретна перемикач

На даний момент у мене є ці дві радіо кнопки, щоб користувач міг вирішити, чи потрібна їм пошта, включена в ціну чи ні:

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

Мені потрібно скористатися Jquery, щоб перевірити, чи встановлено перемикач "так", і якщо він є, виконайте функцію додавання. Може хтось скаже мені, як я це зробив, будь ласка?

Дякуємо за будь-яку допомогу

редагувати:

Я оновив свій код до цього, але він не працює. Чи я щось роблю не так?

<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: Оновлення: воно працює чудово !
Шеф

Це дивно, це просто не працює на моєму веб-сайті. Принаймні, я знаю, що код правильний, я спробую знайти, що в ньому погано, дякую за всі відповіді!
Даніель Н

Відповіді:


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

Або вище - знову ж таки - використовуючи трохи менш зайвий 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
        }
    });

Перероблений (покращений-деякий) 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 демо .

І, крім того, легке оновлення (оскільки я редагував, щоб включати Snippets, а також посилання JS Fiddle), щоб обернути <input />елементи з <label>s - дозволяти клацнути текст, щоб оновити відповідне <input />- та змінити засоби створення вміст для додавання:

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 демо .

Крім того, якщо вам потрібно лише показувати вміст залежно від того, який елемент перевіряється користувачем, невелике оновлення, яке змінить видимість за допомогою явного показу / приховування:

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

І, нарешті, використовуючи лише 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>

JS Fiddle демо .

Список літератури:


3
Не потрібно перевіряти, перевірено чи ні. Інакше воно ніколи не матиме значення. Витрата ресурсів!
Шеф


12

Щось на зразок цього:

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

3
Об'єкт jQuery завжди правдоподібний. Ви можете використовувати $(...).lengthзамість цього.
pimvdb

Ви маєте на увазі #postageyes:checkedабо $('#postageyes').is(':checked')?
Шеф

@pimvdb Згідно з документами jQuery,is() повертається логічне значення. Так дзвінок .length()порушений. З документів: "На відміну від інших методів фільтрації .is () не створює новий об'єкт jQuery. Натомість він дозволяє перевірити вміст jQuery об'єкта без змін." - api.jquery.com/is
Асаф

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

Це послухає подію зміни на кнопках радіо. Після того, як користувач натисне Yes, подія запуститься, і ви зможете додати все, що завгодно, до DOM.



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

Не надто впевнений у цьому, але не $("#postageyes:checked"завжди повернеться правдою? Чи не доведеться вам використовувати .lengthце для роботи?
Філ

вилучено "або" і все після цього
генезис


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

Хоча цей фрагмент коду може вирішити питання, зокрема пояснення дійсно допомагає покращити якість вашої публікації. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
Патрік Гунд

Зрозумів. Наступна відповідь матиме одну.
Бенджамін

0

Це послухає змінену подію. Я спробував відповіді інших, але ті не працювали для мене і, нарешті, ця спрацювала.

$('input:radio[name="postage"]').change(function(){
    if($(this).is(":checked")){
        alert("lksdahflk");
    }
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.