Тестирование, если флажок установлен с помощью jQuery


588

Если флажок установлен, то мне нужно только получить значение как 1; в противном случае мне нужно получить его как 0. Как мне сделать это с помощью jQuery?

$("#ans").val() всегда даст мне одно право в этом случае:

<input type="checkbox" id="ans" value="1" />

2
.val () - получить атрибут значения, а не статус проверки. Атрибут value может быть любым, он не должен быть логическим.
Пабло Пасос

если вы все еще здесь, вы можете обновить принятый ответ для современного программного обеспечения ... многие люди все еще видят этот вопрос
xaxxon

Ответы:


1008

Используйте, .is(':checked')чтобы определить, проверен ли он или нет, а затем установите соответствующее значение.

Больше информации здесь.


1
Кроме того, когда вы делаете $ ("# id"). Is ("флажок") в условии if, вы получите true или false, а не вкл / выкл, по возвращении, и вы можете отправить его в свой внутренний скрипт и делай что хочешь.
Занольдор

1
Вероятно, это не имеет значения в настоящее время: ReSharper (я полагаю) выводит предупреждение « Псевдокласс« флажок »не совместим с Internet Explorer 8.0 ».
Уве Кейм

211
$("#ans").attr('checked') 

скажет вам, если это проверено. Вы также можете использовать второй параметр true / false, чтобы установить / снять флажок.

$("#ans").attr('checked', true);

За комментарий используйте propвместо attrкогда доступно. Например:

$("#ans").prop('checked')

90

Просто используйте $(selector).is(':checked')

Возвращает логическое значение.


56
// use ternary operators
$("#ans").is(':checked') ? 1 : 0;

@Loic, чтобы установить его значение, используя краткий троичный синтаксис, например:: a = ischecked? 1: 0

21

Ответ Стефана Бринкманна отличный, но неполный для начинающих (опускается переменная). Просто для уточнения:

// this structure is called a ternary operator
var cbAns = ( $("#ans").is(':checked') ) ? 1 : 0;

Это работает так:

 var myVar = ( if test goes here ) ? 'ans if yes' : 'ans if no' ;

Пример:

var myMath = ( 1 > 2 ) ? 'yes' : 'no' ;
alert( myMath );

Оповещения "нет"

Если это полезно, пожалуйста, подтвердите ответ Стефана Бринкмана.



15

Я обнаружил ту же проблему раньше, надеюсь, это решение поможет вам. во-первых, добавьте пользовательский атрибут в свои флажки:

<input type="checkbox" id="ans" value="1" data-unchecked="0" />

напишите расширение jQuery для получения значения:

$.fn.realVal = function(){
    var $obj = $(this);
    var val = $obj.val();
    var type = $obj.attr('type');
    if (type && type==='checkbox') {
        var un_val = $obj.attr('data-unchecked');
        if (typeof un_val==='undefined') un_val = '';
        return $obj.prop('checked') ? val : un_val;
    } else {
        return val;
    }
};

используйте код для получения значения флажка:

$('#ans').realVal();

вы можете проверить здесь


10
... потому что jQuery известен как библиотека "пиши больше делай меньше"
myshadowself

Длинная история, которую вы прошли, JQUERY хочет, чтобы разработчик меньше писал и делал больше. простая проблема заслуживает простого решения
ShapCyber

да, договорились, пиши меньше, делай больше. вы пишете расширение один раз, а в остальное время вы вызываете только API $ (someradio) .realVal (), вам не нужно писать расширение много раз.
alphakevin

Вам даже не нужно было писать расширение один раз, не говоря уже о «много раз»! Oo
Coz


7
<input type="checkbox" id="ans" value="1" />

Jquery: var test= $("#ans").is(':checked') и он возвращает истину или ложь.

В вашей функции:

$test =($request->get ( 'test' )== "true")? '1' : '0';



4
function chkb(bool){
if(bool)
return 1;
return 0;
}

var statusNum=chkb($("#ans").is(':checked'));

statusNum будет равен 1, если флажок установлен, и 0, если это не так.

РЕДАКТИРОВАТЬ: Вы также можете добавить DOM к функции.

function chkb(el){
if(el.is(':checked'))
return 1;
return 0;
}

var statusNum=chkb($("#ans"));

4

Недавно я прошел через случай, когда мне нужно было проверить значение флажка, когда пользователь нажимал на кнопку. Единственный правильный способ сделать это - использовать prop()атрибут.

var ansValue = $("#ans").prop('checked') ? $("#ans").val() : 0;

это сработало в моем случае, может быть, кому-то это понадобится.

Когда я попробовал, .attr(':checked')он вернул, checkedно я хотел логическое значение и .val()вернул значение атрибута value.


4

Есть несколько вариантов, как ....

 1. $("#ans").is(':checked') 
 2. $("#ans:checked")
 3. $('input:checkbox:checked'); 

Если все эти опции возвращают true, тогда вы можете установить значение соответственно.


Первый должен быть (': флажок'), иначе не работает.
Арье Лившин

2

Попробуй это

$('input:checkbox:checked').click(function(){
    var val=(this).val(); // it will get value from checked checkbox;
})

Здесь флаг равен true, если установлен флажок, иначе

var flag=$('#ans').attr('checked');

Опять это сделает чекед

$('#ans').attr('checked',true);


0

Вы можете получить значение (true / false) с помощью этих двух методов

$("input[type='checkbox']").prop("checked");
$("input[type='checkbox']").is(":checked");

0

Сначала проверьте значение проверено

$("#ans").find("checkbox").each(function(){
    if ($(this).prop('checked')==true){ 
    var id = $(this).val()
    }
});

В противном случае установите значение 0


0

Если вы хотите, чтобы целочисленное значение проверялось или нет, попробуйте:

$("#ans:checked").length

0

Вы можете выполнить это следующим образом:

$('input[id=ans]').is(':checked');     
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.