2013-08-02 80 views
1

我试图获取一个复选框来检查并取消选中它是否未被选中。它正在检查是否未选中 - 但如果选中,则不会取消选中。很奇怪。提前致谢!使用Jquery检查和取消选中复选框

这里是我的代码:

编辑:这里的的jsfiddle:http://jsfiddle.net/itamark/UnR4X/

JS:

$(':checkbox').mouseenter(function(){ 
    if($(this).not(':checked')) { 
     alert('notchecked'); 
     $(this).attr('checked', true); 
    } 
    else if($(this).is(':checked')){ 
     alert('ischecked'); 
     $(this).attr('checked', false); 
    } 


}) 

HTML:

<input type="checkbox" name"myCheck" id="chk1"/>Checkbox</label> 
+0

试试这个 - http://stackoverflow.com/questions/426258/how-do-i-check-a-checkbox-with- jquery-or-javascript –

+0

在悬停时执行此操作有点毫无意义,因为只要您取消悬停/鼠标悬停,复选框将始终*取消选中,无论用户的行为如何。这是什么意思? –

+0

@DavidThomas是的 - 我已经切换到'.mouseenter'。我会更新代码。 – itamar

回答

4

.is().not()是不一样的

.is()返回TRUE或FALSE而.not()删除jQuery的元素,如果它匹配。

因此,$(selector).not()将永远是真实的,因为jquery被定义。

要检查元素是否存在,请使用.length

$(':checkbox').hover(function(){ 
    if($(this).not(':checked').length) { 
     $(this).prop('checked', true); 
    } 
    else if($(this).is(':checked')){ 
     $(this).prop('checked', false); 
    } 
}) 

小提琴:http://jsfiddle.net/UnR4X/3/

你可能藏汉使用1个衬垫:

$(this).prop('checked', !$(this).prop('checked')); 
+0

虽然所有其他人都非常有帮助 - 这一个班轮运作良好。我还了解到,您不必在元素中直观地具有该属性,以便抓住它。它是否正确? – itamar

+0

不错!脆! – Aditya

1

使用.prop()

$(this).prop('checked', true); 
$(this).prop('checked', false); 
+0

这实际上是我尝试过的第一种方法,它不起作用。只是插上重试,没有雪茄。抱歉。 – itamar

+0

但你的jsfiddle需要修正一些错字,然后才能正常工作:http://jsfiddle.net/UnR4X/6/但是不确定你在找什么。您正在使用悬停输入/输出处理程序。检查DOC,你想也许别的 –

1

我想触发click事件会改变复选框的选中状态

$(':checkbox').hover(function() { 
    $(this).trigger('click'); 
}); 
+0

我很兴奋,因为这种工作。它检查框但不添加属性。尝试添加它作为道具,并再次打破检查切换。 – itamar

+0

第二个想法 - 它不需要一个可视化的'clicked'属性,对于所有意图和目的都被视为被检查的权利,对吧? – itamar

+0

这应该是对的 – callmehiphop

1

Working Fiddle

注意你输入的名称PARAM需要一个平等的。此外,悬停错误的事件,除非你指定悬停和悬停处理程序,否则明智的功能将继续运作。更容易使用mouseenter处理程序。这种方式只能在开始悬停时触发。如果你想在鼠标离开时发生其他事情,你可以指定一个鼠标离开。或者,您可以指定2个函数在悬停功能中执行此操作。

$(':checkbox').mouseenter(function(){ 
     if($(this).prop('checked')) { 
      $(this).prop('checked', false); 
     } 
     else{ 
      $(this).prop('checked', true); 
     } 

}) 
+0

是的 - 这给你的复选标记 - 但我没有看到一个'checked =“选中了”'或者只是一个'checked'属性。 – itamar

+0

@ItamarOKestenbaum你不需要检查是否在元素中。看到这个小提琴。 http://jsfiddle.net/UnR4X/12/ jquery仍然会知道它的选中状态,并且一个http帖子也会发布它。 – Rooster

+0

Phew。这使事情变得更简单。谢谢! – itamar

1

这里是工作提琴, http://jsfiddle.net/UnR4X/11/

$(':checkbox').mouseenter(function(){ 
     if($(this).prop('checked')) { 
      $(this).prop('checked', false); 
      $(this).removeAttr('checked'); 
     } 
     else{ 
      $(this).prop('checked', true); 
      $(this).attr('checked',true); 
     } 
相关问题