Подтвердить что ты не робот

Флажок jQuery Uniform не проверяет (un)

Я использую jQuery Uniform для ввода/выбора стиля и т.д. Однако флажок перестает работать. Я appending данные, отправленные из вызова ajax. После его загрузки я использую $.uniform.update("input:checkbox") для обновления нового html. При попытке (un) проверить ввод, он работает только один раз. Если я хочу (un) проверить его снова, он не изменится вообще.

Я попытался изменить Uniform Javascript, чтобы все действия (т.е. click, focus, blur и т.д.) находились под символом .live. (т.е. .live("click",). Это просто прекращает работу.

Update:

Я полностью прочитал Uniform JS и обнаружил проблему:

if(!$(elem).attr("checked")){
    //box was just unchecked, uncheck span
    spanTag.removeClass(options.checkedClass);
}else{
    //box was just checked, check span.
    spanTag.addClass(options.checkedClass);
}

Синтаксис .attr("checked") не работает. Он всегда будет возвращать false. Зачем? Я не знаю. Кроме того, он не обновляет исходный input, чтобы удалить атрибут checked или установить атрибут checked.

Я пропустил официальный сайт и обнаружил, что он не обновляет входной флажок. Так что это не только я xP

Я немного поработал и нашел различные методы проверки флажка, но следующие методы не работают:

if ($(elem).attr("checked")) // The original.
if ($(elem).attr("checked") == true)
if ($(elem).is(":checked"))
if ($(elem).checked)
// and:
var check = $(elem).match(/checked=/);
if (check == null)

Слова руководства очень ценятся ~: 3

4b9b3361

Ответ 1

ПРОСТОЕ РЕШЕНИЕ

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

$('#checkbox').prop('checked',true);
$.uniform.update();

Изменить

Если вы хотите обновить только #checkbox:

$('#checkbox').prop('checked',true);
$.uniform.update('#checkbox');

Ответ 2

Просто сделайте следующее:

$('#checkbox').prop('checked',true).uniform('refresh');

Ответ 3

Я знаю, что это может быть немного поздно, но, надеюсь, это поможет кому-то. Я должен был добавить пару строк в единый код, чтобы он смотрел флажки с предварительно установленными флажками. Этот код начинается со строки 262 для меня. Я использую Uniform версии 1.7.5. Линии между примечаниями "добавлен Джоном" - это то, что я добавил.

        "click.uniform touchend.uniform": function(){
      if(!$(elem).attr("checked")){
        //box was just unchecked, uncheck span
        spanTag.removeClass(options.checkedClass);
      // Added by John to look for checkboxes with the attr "checked" that have been click to uncheck
      }else if(!$(elem).is(':checked')){
        spanTag.removeClass(options.checkedClass);
      // end addition by john
      }else{
        //box was just checked, check span.
        spanTag.addClass(options.checkedClass);
      }
    },

Ответ 4

jQuery 1.6.4 изменил значение функции attr(), которая используется jquery.uniform.js. attr() теперь возвращает состояние, в котором атрибут находился в момент загрузки страницы, а не состояние атрибута NOW. Существует функция замены prop(), которая выполняет задание, которое attr() выполнял.

Чтобы исправить плагин, замените каждое вхождение attr("checked") на prop("checked"). Также измените attr("disabled") на prop("disabled").

Это должно исправить ваш проект. Это сработало для меня: -)

Смотрите также: https://github.com/pixelmatrix/uniform/pull/167, который пытается решить проблему с лучшей обратной совместимостью.

Ответ 5

Это было какое-то время, но у меня была та же проблема, но я разрешил это простым решением.

Uniform добавляет span к флажку и присваивает ему класс checked, если он установлен или нет, но только на загрузке страницы. Если вы установите флажок или снимите флажок, когда страница уже загружена, он снимет флажок (или отметит), но после того, как span закончит его, вы увидите, что он не обновлен, вам нужно сделать это вручную.

$('#myDiv input[type=checkbox]').attr('checked',true);
$('#myDiv input[type=checkbox]').parent().addClass('checked');

или

$('#myDiv input[type=checkbox]').attr('checked',false);
$('#myDiv input[type=checkbox]').parent().removeClass('checked');

Не может быть самым чистым решением, но отлично работает в каждом браузере.

Ответ 6

Я считаю, что последняя версия JQuery использует другой метод для оценки значения: checked. Используя немного более старую версию (хотя и не идеальную), эта проблема была решена для меня. Это было давно, но PixelMatrix по-прежнему, похоже, не обновил Uniform.

Ответ 7

Не могли бы вы использовать что-то вроде

$("#checkbox").attr("checked", "true");

чтобы установить флажок, и

$("#checkbox").removeAttr("checked");

чтобы снять флажок?

Ответ 8

Вам не нужно менять .attr() на .prop():

    "click.uniform touchend.uniform": function(){
        if(!$(elem).attr('checked')){
            //box was just unchecked, uncheck span
            spanTag.removeClass(options.checkedClass);

            //Added by PingOn
            $(elem).removeAttr('checked');
            //end addition by PingOn

            // Added by John
        }else if(!$(elem).is(':checked')){
            spanTag.removeClass(options.checkedClass);
            // end addition by john

            //Added by PingOn
            $(elem).removeAttr('checked');
            //end addition by PingOn
        }else{
            //box was just checked, check span.
            spanTag.addClass(options.checkedClass);

            //Added by PingOn
            $(elem).attr('checked','true');
            //end addition by PingOn
      }