Установка переключателей с помощью setField в канале данных (jQuery) - PullRequest
2 голосов
/ 20 мая 2011

Мне нужно установить переключатели, используя метод setField () из datalink (плагин jQuery).

Я прочитал о проблемах, связанных с этим, на gitHub и увидел ответвление для его решения (https://github.com/jamiemthomas/jquery-datalink),, но это для более старых версий jQuery.

Каким будет простой способ обновления радиокнопок с использованием метода setField плагина связи с данными, возможно, с небольшой модификацией? Может быть есть другие альтернативы / плагины?

Ответы [ 2 ]

4 голосов
/ 20 мая 2011

Благодаря комментарию от проблемы, зарегистрированной в этом (https://github.com/jquery/jquery-datalink/issues/14#issuecomment-531732), Я приспособил найденный там взлом. Изменяя метод setField следующим образом, он работает:

(EDIT - также добавлен код для установки флажка).

До:

    if ( target.nodeType ) {
        var setter = fnSetters[ field ] || "attr";
        $(target)[setter](value);

После того, как:

    if ( target.nodeType ) {
        var setter = fnSetters[ field ] || "attr";
        /* Hack to set radio buttons */
        if ($(target).is(':radio')) {
            $(target).parent().children(":radio[value='" + value + "']").attr('checked', true);
        } else if ($(target).is(':checkbox')) {
            if (target.value == value) $(target).attr('checked', true);
        } else {
            $(target)[setter](value);
        }

РЕДАКТИРОВАТЬ - я также разветвил оригинальный проект связи с данными на GitHub и добавил следующие изменения: https://github.com/mydoghasworms/jquery-datalink/

1 голос
/ 28 июня 2011

Обновлен код mydoghasworm со следующими изменениями, чтобы исправить проблему «не удается снять галочку», с которой он столкнулся в следующих двух фрагментах кода.

            if ( m ) {
                var name = m.name,
                    value = m.value,
                    convert = m.convert;
                if (ev.target.attributes['type'].nodeValue === "checkbox") {
                    value = ev.target.checked;
                }
                if ( convert ) {
                    value = convert( value, ev.target, target );
                }
                if ( value !== undefined ) {
                    $.setField( target, name, value );
                }

Также

} else if ($(target).is(':checkbox')) {
                //value is whether or not checkbox is clicked
                if (value)
                    $(target).attr('checked', true);
                else
                    $(target).removeAttr('checked');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...