Я написал короткий плагин для jQuery, который изменит стили встроенного флажка браузера, чтобы он лучше соответствовал теме.
Вот код плагина:
(function ($) {
$.fn.checkbox = function()
{
var uiBox = $('<span class="ui-checkbox" />'),
that = this;
uiBox.data('checkbox', this).insertAfter(this);
this.hide();
if(this.is(':disabled')) { uiBox.addClass('disabled'); }
if(this.is(':checked')) { uiBox.addClass('checked'); }
if(!uiBox.hasClass('disabled'))
{
uiBox.on('click', function() {
var checkbox = $(this).data('checkbox');
if(checkbox.is(':checked'))
{
uiBox.removeClass('checked');
checkbox.attr('checked', false);
}
else
{
uiBox.addClass('checked');
checkbox.attr('checked', 'checked');
}
});
}
};
} (jQuery));
Затем этот код вызывается через обработчик DOMReady, используя:
$('input[type="checkbox"].ui').checkbox();
Все работает в первые три раза, когда нажимается флажок, но по какой-то причине код больше не выполняет добавление/удаление необходимых классов, а исходный флажок никогда не обновляется. Может ли кто-нибудь пролить свет на ситуацию и объяснить, почему это происходит?
Это потому, что вы используете attr()
а не prop()
, изменяя только атрибут, а не базовое свойство, измените его на
checkbox.prop('checked', true);
Используйте этот следующий код, я попробовал его в своем примере скрипта, он работает там,
checkbox.prop('checked', true);
Надеюсь это поможет!
attr()
работает для первых трех кликов?