我使用了悬停功能,你可以在鼠标悬停和y和mouseout上执行x。我正在为点击尝试相同但它似乎不起作用:
$('.offer').click(function(){
$(this).find(':checkbox').attr('checked', true );
},function(){
$(this).find(':checkbox').attr('checked', false );
});
我希望在点击div
时选中该复选框,如果再次点击则取消选中 - 点击切换。
答案 0 :(得分:214)
通过在每次点击时翻转复选框的当前“已检查”状态,可以轻松完成此操作。例子:
$(".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);
});
答案 1 :(得分:27)
另一种方法是像这样扩展jquery:
$.fn.toggleCheckbox = function() {
this.attr('checked', !this.attr('checked'));
}
然后致电:
$('.offer').find(':checkbox').toggleCheckbox();
答案 2 :(得分:11)
警告:使用 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
});
答案 3 :(得分:7)
您可以使用toggle
功能:
$('.offer').toggle(function() {
$(this).find(':checkbox').attr('checked', true);
}, function() {
$(this).find(':checkbox').attr('checked', false);
});
答案 4 :(得分:2)
为什么不在一行?
$('.offer').click(function(){
$(this).find(':checkbox').attr('checked', !$(this).find(':checkbox').attr('checked'));
});
答案 5 :(得分:1)
我有一个名为chkDueDate
的复选框和一个带有点击事件的HTML对象,如下所示:
$('#chkDueDate').attr('checked', !$('#chkDueDate').is(':checked'));
单击HTML对象(在本例中为<span>
)切换复选框的checked属性。
答案 6 :(得分:1)
jQuery:Best Way,将动作委托给jQuery(jQuery = jQuery)。
$( "input[type='checkbox']" ).prop( "checked", function( i, val ) {
return !val;
});
答案 7 :(得分:0)
尝试改变这一点:
$(this).find(':checkbox').attr('checked', true );
到此:
$(this).find(':checkbox').attr('checked', 'checked');
不是100%肯定是否会这样做,但我似乎记得有类似的问题。祝你好运!
答案 8 :(得分:0)
$('.offer').click(function(){
if ($(this).find(':checkbox').is(':checked'))
{
$(this).find(':checkbox').attr('checked', false);
}else{
$(this).find(':checkbox').attr('checked', true);
}
});
答案 9 :(得分:0)
在JQuery中,我不认为click()接受两个切换函数。您应该使用toggle()函数:http://docs.jquery.com/Events/toggle
答案 10 :(得分:0)
$('.offer').click(function() {
$(':checkbox', this).each(function() {
this.checked = !this.checked;
});
});
答案 11 :(得分:0)
<label>
<input
type="checkbox"
onclick="$('input[type=checkbox]').attr('checked', $(this).is(':checked'));"
/>
Check all
</label>
答案 12 :(得分:0)
最简单的解决方案
$('.offer').click(function(){
var cc = $(this).attr('checked') == undefined ? false : true;
$(this).find(':checkbox').attr('checked',cc);
});
答案 13 :(得分:0)
切换复选框值的另一种替代解决方案:
<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);
});
答案 14 :(得分:0)
$('controlCheckBox').click(function(){
var temp = $(this).prop('checked');
$('controlledCheckBoxes').prop('checked', temp);
});