Нажмите кнопку переключить с помощью jQuery
я использовал функцию наведения, где вы делаете x при наведении курсора мыши и y и mouseout. Я пытаюсь то же самое для щелчка, но это, кажется, не работает:
$('.offer').click(function(){
$(this).find(':checkbox').attr('checked', true );
},function(){
$(this).find(':checkbox').attr('checked', false );
});
Я хочу, чтобы флажок был установлен при нажатии на div
, и снят флажок, если щелкнуть снова-переключатель щелчка.
15 ответов:
это легко сделать, перевернув текущее "проверенное" состояние флажка при каждом щелчке. Примеры:
$(".offer").on("click", function () { var $checkbox = $(this).find(':checkbox'); $checkbox.attr('checked', !$checkbox.attr('checked')); });
или:
$(".offer").on("click", function () { var $checkbox = $(this).find(':checkbox'); $checkbox.attr('checked', !$checkbox.is(':checked')); });
или, непосредственно манипулируя свойством DOM 'checked' (т. е. не используя
attr()
до fetch текущее состояние нажатого флажка):$(".offer").on("click", function () { var $checkbox = $(this).find(':checkbox'); $checkbox.attr('checked', !$checkbox[0].checked); });
...и так далее.
Примечание: начиная с jQuery 1.6, флажки должны быть установлены с помощью
prop
неattr
:$(".offer").on("click", function () { var $checkbox = $(this).find(':checkbox'); $checkbox.prop('checked', !$checkbox[0].checked); });
другим подходом было бы расширение jquery следующим образом:
$.fn.toggleCheckbox = function() { this.attr('checked', !this.attr('checked')); }
затем вызова:
$('.offer').find(':checkbox').toggleCheckbox();
предупреждение: использование attr () или prop () чтобы изменить состояние флажка не огонь событие изменения в большинстве браузеров, с которыми я тестировал. Проверенное состояние изменится, но событие не будет пузыриться. Вы должны инициировать событие изменения вручную после установки атрибутом checked. У меня были некоторые другие обработчики событий, контролирующие состояние флажков, и они будут отлично работать с прямыми щелчками пользователя. Однако установка проверенного состояния программно не удается последовательно инициировать событие изменения.
jQuery 1.6
$('.offer').bind('click', function(){ var $checkbox = $(this).find(':checkbox'); $checkbox[0].checked = !$checkbox[0].checked; $checkbox.trigger('change'); //<- Works in IE6 - IE9, Chrome, Firefox });
вы могли бы использовать
toggle
функция:$('.offer').toggle(function() { $(this).find(':checkbox').attr('checked', true); }, function() { $(this).find(':checkbox').attr('checked', false); });
почему не в одну строку?
$('.offer').click(function(){ $(this).find(':checkbox').attr('checked', !$(this).find(':checkbox').attr('checked')); });
у меня есть один флажок с именем
chkDueDate
и HTML-объект с событием click следующим образом:$('#chkDueDate').attr('checked', !$('#chkDueDate').is(':checked'));
щелчок по объекту HTML (в данном случае a
<span>
) переключает свойство checked объекта checkbox.
jQuery: лучший способ, делегировать действия в jQuery (jQuery = jQuery).
$( "input[type='checkbox']" ).prop( "checked", function( i, val ) { return !val; });
попробуйте изменить это:
$(this).find(':checkbox').attr('checked', true );
для этого:
$(this).find(':checkbox').attr('checked', 'checked');
не на 100% уверен, что это сделает это, но я, кажется, помню, что у меня была аналогичная проблема. Удачи вам!
$('.offer').click(function(){ if ($(this).find(':checkbox').is(':checked')) { $(this).find(':checkbox').attr('checked', false); }else{ $(this).find(':checkbox').attr('checked', true); } });
в JQuery я не думаю, что click() принимает две функции для переключения. Вы должны использовать функцию toggle() для этого:http://docs.jquery.com/Events/toggle
$('.offer').click(function() { $(':checkbox', this).each(function() { this.checked = !this.checked; }); });
простое решение
$('.offer').click(function(){ var cc = $(this).attr('checked') == undefined ? false : true; $(this).find(':checkbox').attr('checked',cc); });
<label> <input type="checkbox" onclick="$('input[type=checkbox]').attr('checked', $(this).is(':checked'));" /> Check all </label>
еще одно альтернативное решение для переключения значения флажка:
<div id="parent"> <img src="" class="avatar" /> <input type="checkbox" name="" /> </div> $("img.avatar").click(function(){ var op = !$(this).parent().find(':checkbox').attr('checked'); $(this).parent().find(':checkbox').attr('checked', op); });