Нажмите переключиться с помощью jQuery
Вопрос
Я использовал функцию наведения, где вы делаете x при наведении курсора мыши, а y и наведение курсора мыши.Я пытаюсь сделать то же самое для клика, но, похоже, это не работает:
$('.offer').click(function(){
$(this).find(':checkbox').attr('checked', true );
},function(){
$(this).find(':checkbox').attr('checked', false );
});
Я хочу, чтобы флажок устанавливался при нажатии на div
, и снятый флажок при повторном нажатии — переключение щелчка.
Решение
Это легко сделать, переворачивая текущее «отмеченное» состояние флажка при каждом щелчке мыши.Примеры:
$(".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()
к принести текущее состояние установленного флажка):
$(".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();
Предупреждение:с использованием атрибут() или опора() изменить состояние флажка не стрелять изменить событие в большинстве браузеров, с которыми я тестировал.Отмеченное состояние изменится, но всплывание событий не произойдет.Вы должны инициировать событие изменения вручную после установки проверенного атрибута.У меня были другие обработчики событий, отслеживающие состояние флажков, и они отлично работали при прямых щелчках пользователя.Однако программная установка проверенного состояния не приводит к последовательному запуску события изменения.
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 с событием щелчка следующим образом:
$('#chkDueDate').attr('checked', !$('#chkDueDate').is(':checked'));
Щелкнув объект HTML (в данном случае <span>
) переключает проверенное свойство флажка.
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);
});
$('controlCheckBox').click(function(){
var temp = $(this).prop('checked');
$('controlledCheckBoxes').prop('checked', temp);
});