JQuery не возвращает проверенное значение радио - PullRequest
0 голосов
/ 17 июля 2010

UPDATE: Проблема более сложная. Похоже, что он включает в себя заголовок аккордеона, который не передает события .click правильно, и не имеет ничего общего с: флажок селектора. Весь этот пример отлично работает в тестовом файле.

См. Радиовход в заголовке проблемы с гармошкой? BUG

У меня есть форма с несколькими радиоэлементами, каждый из которых именуется "rx" (где x равен 1..3), применяется .buttonset (). с

например, id = 3

alert ($('input:radio[name=r'+id+']').val());
//returns value of the first radio in the set

alert ($('input:radio[name=r'+id+']:checked').val());
//returns 'undefined', even one of the radios is checked.

и я пробовал оба :checked')[0], :checked').get(0), :checked').attr('id')

Интересно, почему первый метод возвращает значение ... Имеет ли это какое-либо отношение к добавлению классов / элемента .buttonset ??

Любой совет приветствуется!

PS. $ ( 'Ввода: радио [имя = г' + идентификатор + ']') получаем (0). возвращает [объект HTMLInputElement], я предполагаю способ, которым он должен. Но у этого объекта нет методов .html () или .val (). $ ('input: radio [name = r' + id + ']: check'). get (0) по-прежнему 'undefined'.

PPS. форсирование видимости для ui-helper-hidden-available buttonset не меняет «проверено» для оригинальных радиоэлементов. Думаю, я могу использовать .ui-state-active для проверки активной радиосвязи ... Любой лучший способ?

Ответы [ 4 ]

1 голос
/ 17 июля 2010

Причина, по которой он не возвращает значение, состоит в том, что при использовании селектора :checked, если радио не выбрано, оно не будет частью набора результатов. Пример:

<input type="radio" name="r1" value="1" checked="checked" />
<input type="radio" name="r2" value="2" />

Сейчас:

alert($('input:radio[name=r1]').val()); // alerts 1
alert($('input:radio[name=r1]:checked').val()); // alerts 1
alert($('input:radio[name=r2]').val()); // alerts 2
alert($('input:radio[name=r2]:checked').val()); // alerts undefined as the button is not selected
0 голосов
/ 17 апреля 2013

Я написал плагин jQuery для установки и получения значений переключателей.Он также учитывает событие «изменения» на них.

(function ($) {

    function changeRadioButton(element, value) {
        var name = $(element).attr("name");
        $("[type=radio][name=" + name + "]:checked").removeAttr("checked");
        $("[type=radio][name=" + name + "][value=" + value + "]").attr("checked", "checked");
        $("[type=radio][name=" + name + "]:checked").change();
    }

    function getRadioButton(element) {
        var name = $(element).attr("name");
        return $("[type=radio][name=" + name + "]:checked").attr("value");
    }

    var originalVal = $.fn.val;
    $.fn.val = function(value) {

        //is it a radio button? treat it differently.
        if($(this).is("[type=radio]")) {

            if (typeof value != 'undefined') {

                //setter
                changeRadioButton(this, value);
                return $(this);

            } else {

                //getter
                return getRadioButton(this);

            }

        } else {

            //it wasn't a radio button - let's call the default val function.
            if (typeof value != 'undefined') {
                return originalVal.call(this, value);
            } else {
                return originalVal.call(this);
            }

        }
    };
})(jQuery);

Поместите код в любое место, чтобы включить надстройку.Тогда наслаждайтесь!Он просто переопределяет стандартную функцию val, ничего не нарушая.

Вы можете посетить этот jsFiddle, чтобы попробовать его в действии и посмотреть, как он работает.

http://jsfiddle.net/ffMathy/MN856/

0 голосов
/ 17 июля 2010

Прочитайте страницу о селекторах, особенно этот http://api.jquery.com/attribute-starts-with-selector/

alert ($(':radio[name^=r]:checked').val());

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

0 голосов
/ 17 июля 2010

Попробуйте это-

$("input[name='radio_name']:checked").val();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...