jQuery val () и флажки



есть ли какое-то обоснование для val() бесполезно для элементов управления флажками, в то время как это полезно для получения входных данных последовательно через все другие элементы управления вводом?



например, для флажков, at кажется всегда возвращайте " on " независимо от состояния флажка. для других элементов управления вводом, которые на самом деле не имеют атрибута" value", например select и textarea, он ведет себя так, как вы ожидаете. Смотрите:



http://jsfiddle.net/jamietre/sdF2h/4/



Я не могу придумать вескую причину, почему он не вернется true или false. В противном случае, по крайней мере, возвращайте "on" только при проверке, а пустую строку, когда нет. В противном случае, по крайней мере, всегда возвращайте пустую строку, учитывая, что флажки не имеют value атрибут!



очевидно, я знаю, как получить значение с помощью attr, но вот ситуация. Я разрабатываю простой (пока в любом случае) Реализация C# jQuery для выполнения синтаксического анализа HTML на сервере, и я пытаюсь быть полностью верным реализации jQuery, поэтому он ведет себя последовательно на клиенте или сервере против одного и того же DOM. Но это просто кажется глупым, и мне трудно заставить себя на самом деле кодировать "значение", чтобы вернуть "ON" для флажка, несмотря ни на что. Но если я этого не сделаю, это не будет последовательным. Поэтому я пытаюсь понять, есть ли какая-то причина для этого? Служит ли это какой-то цели, или это просто какой-то артефакт? Будет ли кто-нибудь когда-нибудь использовать val() метод против флажка, если да, то почему? Если нет, то почему архитекторы jQuery решили использовать этот подход, чтобы сделать его бесполезным?

330   6  

6 ответов:

Я не могу придумать вескую причину, почему это не возвращают true или false. Недостаток что, по крайней мере, вернуть "на" только тогда, когда проверено, и пустая строка, когда нет. В противном случае, по крайней мере, всегда возвращаются пустая строка, учитывая, что флажки не имеют значения атрибута!

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

<input type="checkbox" name="foo[]" value="1" />
<input type="checkbox" name="foo[]" value="2" />

затем, когда пользователь отправляет форму на сервер можно разобрать, какие из флажков были проверены, проверив значения foo[] массив. Значение флажка не меняет независимо от того, установлен он или нет; браузер просто не отправляет значения непроверенных флажков на сервер. Если вы, например. $('#your-form').serialize()в jQuery он должен работать аналогично; он не должен включать значения непроверенных флажков. Если вы опустите значение из флажка, он просто по умолчанию on.

если вы хотите проверить, является ли индивидуальный флажок установлен или нет в jQuery, лучший наиболее описательный способ-это сделать $(this).is(':checked')

вы говорите ,что " флажки не имеют value атрибут". Наоборот: the value атрибут является необязательным за исключением на флажки и переключатели.

С спецификации W3C:

[the value атрибут] является необязательным, за исключением тех случаев, когда атрибут type имеет значение "radio"или " checkbox"

on это значение по умолчанию, которое ваш браузер дает элементу, когда вы игнорируете спецификацию и не поставил .

вы должны помнить, что значение означает: он отправляется с name элемента на сервер при отправке формы. Если он не установлен, значение не передается. Значение on поэтому отправляется только тогда, когда флажок установлен.

возможно, это должно помочь

$(document).ready(function() {
    $('input[type=checkbox]').click(function() {
      alert("val="+$(this).val()+",checked="+$(this).attr('checked'));
    });

});

использовать input[type=checkbox] выберите input type="checkbox" так как флажок есть и ввод с типом= "флажок"

а также поставить значение атрибута флажок.

On jsfiddle

обновление

<form method="post" action="#">
    PHP<input type="checkbox" name="ch[]" value="PHP"><br/>
    JS<input type="checkbox" name="ch[]" value="JS"><br/>
    JAVA<input type="checkbox" name="ch[]" value="JAVA"><br/>
    PYTHON<input type="checkbox" name="ch[]" value="PYTHON"><br/>
    <input type="submit" name="submit"/>
</form>

и php

if($_POST){
foreach($_POST['ch'] as $post => $value){
    echo "$post -> $value <br/>";
}
}

все они имеют одинаковое имя, поскольку они являются общей группой кнопок. Вы знаете, что было проверено, а что не было до конца свои ценности.

другой путь

if($_POST){
    foreach($_POST as $post => $value){
        echo "$post -> $value <br/>";
    }
}

<form method="post" action="#">
    PHP<input type="checkbox" name="PHP"><br/>
    JS<input type="checkbox" name="JS"><br/>
    JAVA<input type="checkbox" name="JAVA"><br/>
    PYTHON<input type="checkbox" name="PYTHON"><br/>
    <input type="submit" name="submit"/>
</form>

но предыдущий, кажется, добавляет более динамичный и менее утомительный(я бы поверил).

а что касается вопроса @Capsule

alert("val="+$(this).val()+",checked="+$(this).attr('checked'));
<input type="checkbox"> Check me.

возвращает значение on Я считаю, что это значение по умолчанию флажка.

и второй эксперимент также дает on значение.

надеюсь, я не ошибаюсь.

Если вы передадите массив в функцию val, он установит флажок как проверенный, если значение флажка соответствует значению в массиве. Источник: http://api.jquery.com/val/#val-value

<input id="checkbox" type="checkbox" value="remember">    

$("#checkbox").val(["remember"]);

флажок не всегда один, и его значение передается при отправке формы (в противном случае, имя/значение не передается вообще).

Это очень полезно при создании массивов из флажков, вы можете использовать name="test[]" как их имя, и установить различные значения в каждом. При анализе представленного результата вы получаете массив, содержащий все проверенные значения

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

в отличие от текстового поля, флажка имеет по умолчанию стоимость которого составляет on - Это отправляется на сервер, когда флажок установлен, но не имеет value самостоятельно, так что код обработки может знать, что он был выбран.

так .val() метод работает просто отлично, возвращая значение элемента.

вы правы, что jQuery отсутствует простой способ увидеть, если выбран определенный флажок / переключатель, что-то вроде $("#mycheckbox").checked() но для этого у нас есть плагины. :)

Comments

    Ничего не найдено.