2013-09-25 14 views
-1

Я пытаюсь снять отметку с переключателя, если он установлен, а также проверить переключатель, если он не установлен. Однако он всегда говорит, что проверяется, когда это не так.Проверка Jquery, если установлен переключатель радиосвязи

Вот мой код:

$('input[type=radio]').on('click', function() { 
    if ($(this).attr('checked') == 'checked') { 
     $(this).attr('checked', false); 
    } else { 
     $(this).attr('checked', true); 
    } 
}); 

Приведенный выше код всегда попадает в первую часть, если. Я также попытался

$(this).is(':checked') 

и

$(this).val() 

и

$(this).attr('checked') == true 

, но ничего, кажется, работает.

Как я могу заставить это работать?

+1

Вы уверены, что не хотите делать флажки? Это, похоже, противоречит нормальному использованию переключателя. –

+0

Нет, потому что с помощью флажков вы можете выбрать несколько опций. Я хочу выбрать 0 или 1 вариант. Таким образом, пользователь может отменить выбор, если захочет. – socketman

+0

У меня есть пример, который работает, прокрутите вниз до моего ответа – Aaron

ответ

0

Я не знаю, почему это получил отрицательные голоса. Использование переключателя состоит в том, что вы можете выбрать 0 или 1 опции, а список флажков - если вам нужно выбрать 0 или несколько вариантов. Но что, если вы хотите отменить выбор переключателя для дополнительного вопроса?

Я решил это, создав еще один атрибут на переключателях под названием «проверенный данными».

Ниже была реализация:

$('input[type=radio]').on('click', function() { 
    var radioButton = $(this); 
    var radioButtonIsChecked = radioButton.attr('data-checked') == 'true'; 

    // set 'checked' to the opposite of what it is 
    setCheckedProperty(radioButton, !radioButtonIsChecked); 

    // you will have to define your own getSiblingsAnswers function 
    // as they relate to your application 
    // but it will be something similar to radioButton.siblings() 
    var siblingAnswers = getSiblingAnswers(radioButton); 

    uncheckSiblingAnswers(siblingAnswers); 
}); 

function uncheckSiblingAnswers(siblingAnswers) { 
    siblingAnswers.each(function() { 
     setCheckedProperty($(this), false); 
    }); 
} 

function setCheckedProperty(radioButton, checked) { 
    radioButton.prop('checked', checked); 
    radioButton.attr('data-checked', checked); 
} 

На странице загрузки, установите свойство данных проверяются истина или ложь, в зависимости от того, или нет, это уже проверено.

$(document).ready(function() { 
    $('input[type=radio]').each(function() { 
     var radioButton = $(this); 
     var radioButtonIsChecked = radioButton.attr('checked') == 'checked'; 

     setCheckedProperty(radioButton, radioButtonIsChecked); 
    }); 
}); 
0

Чтобы снять флажок, вам необходимо удалить атрибут, чтобы снять флажок, и добавить атрибут, чтобы проверить переключатель. Не назначайте значения к нему:

<input type="radio" name="radio1"> 
<input type="radio" name="radio1" checked> 

использование:

$(this).addAttr("checked") 
$(this).removeAttr("checked") 
0

Это никогда не должно потерпеть неудачу, но это другой подход. Направьте родителя и верните, какая радиостанция проверена, вместо того, чтобы смотреть на все из них. Просто идея

var myRadio; 
$('#radioParent input:radio').click(function() { 
    myRadio = $(this).attr('id'); 
    //console.log(myRadio); 
    //return myRadio; 
}); 
1

Вот fiddle надеюсь, что это мыт помощь:

<input type="radio" name="" value="1000" align="middle" id="private_contest">1000 is the value<br> 

<input type="radio" name="" value="2000" align="middle" id="private_contest">2000 is the value 

и соответствующие JQuery является:

$('input[type=radio]').on('click', function() { 

       $(this).siblings().prop('checked', true); 
       $(this).prop('checked', false); 

     }); 
Смежные вопросы