Программно снимите флажок jQuery UI

У меня есть элемент HTML на моей странице, например:

<input type="checkbox" id="locked" /><label for="locked">Locked</label>

И я делаю вызов внутри моего $(document).ready(), чтобы изменить это как кнопку jQuery UI так:

$('#locked').button({
    'icons': {
        'primary': 'ui-icon-unlocked'
    },
    'label': 'Unlocked'
});

Фоновый контекст заключается в том, что пользователь может использовать эту кнопку для блокировки/разблокировки определенного объекта, чтобы фоновый процесс не изменил его, и он начинается с статуса "Unlocked". Если javascript не включен, пользователь видит флажок и ярлык "Locked" рядом с ним.

Я хочу иметь возможность программно проверять/снимать эту кнопку. Я пробовал:

$('#locked').attr('checked', false);

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

Я могу проверить свойство checkbox checked, а затем сделать .click(), если он не соответствует тому, что я хочу, но это не очень элегантно.

Ответы

Ответ 1

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

$('#locked').removeAttr('checked');

Это просто догадка к вашему делу, но обычно работает для меня как шарм.

EDIT: взглянув на документацию jQueryUI, здесь вы также можете попробовать после изменения программно состояния этого флажка:

$('#locked').button( "refresh" )

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

Ответ 2

jQuery 1.5.x и ранее: $('#locked').attr('checked','');

jQuery 1.6.0 и более поздние версии: $('#locked').prop('checked', false);

Атрибут checked считается свойством и теперь имеет свой собственный метод. Вы должны использовать .prop(), если он доступен для обеспечения того, чтобы ваши пользователи соблюдали желаемое поведение.

Ответ 3

Используйте новую функцию .prop() в jQuery 1.6 +:

$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);

или с id

$('#myCheckboxId').prop('checked', false);

Для jQuery 1.5 и ниже

$('.myCheckbox').attr('checked','checked');
$('.myCheckbox').removeAttr('checked');