如果选中此复选框,请执行此操作


126

选中复选框时,我希望它打开<p> #0099ff

当我取消选中该复选框时,我希望它撤消该操作。

我到目前为止的代码:

$('#checkbox').click(function(){
    if ($('#checkbox').attr('checked')) {
        /* NOT SURE WHAT TO DO HERE */
    }
}) 

1
“ ...如果未选中,则禁用该功能。” -传递给.click()click事件的函数。因此,我不理解您所说的“启用”和“禁用”是什么意思。如果选中此复选框,则可以调用function a()。但是您必须编写反向功能以在选中此复选框时调用。我很困惑。
jensgram

你可以,当然,.bind().unbind()事件另一基于该复选框状态元素。那是你所追求的吗?
jensgram

1
很抱歉发送垃圾邮件,但我已经一个例子
jensgram

1
我知道这是一篇老文章,但是现在jQuery用来prop()解决这个问题attr()。该prop()方法当时还没有创建。但是,有关的答案this.checked可能仍然有用。
trysis 2014年

Answers:


235

我会 .change()this.checked

$('#checkbox').change(function(){
    var c = this.checked ? '#f00' : '#09f';
    $('p').css('color', c);
});

-

在使用this.checked
Andy E时,我们对如何过度使用jQuery进行了很好的撰写:利用 jQuery 的强大功能访问元素的属性。文章具体对待使用的.attr("id"),但在这情况下#checkbox 一个<input type="checkbox" />元素的问题是相同的$(...).attr('checked')(甚至$(...).is(':checked'))对this.checked


48

试试这个。

$('#checkbox').click(function(){
    if (this.checked) {
        $('p').css('color', '#0099ff')
    }
}) 

有时我们会滥杀jquery。使用带有普通javascript的jquery可以实现很多事情。


34

可能会发生“ this.checked”始终处于“ on”状态。因此,我建议:

$('#checkbox').change(function() {
  if ($(this).is(':checked')) {
    console.log('Checked');
  } else {
    console.log('Unchecked');
  }
});

就我而言,我只是$(':checkbox')为了使它起作用而更改为;)
Pathros

21

最好用不同的颜色定义一个类,然后切换该类

$('#checkbox').click(function(){
    var chk = $(this);
    $('p').toggleClass('selected', chk.attr('checked'));
}) 

这样,您的代码就更干净了,因为您不必指定所有的CSS属性(假设您要添加边框,文本样式或其他...),而只需切换一个类


4
+1为通用解决方案。$('#checkbox').attr('checked')但是,如果我们知道这#checkbox 一个复选框,则没有理由这样做(如果不是,则ID会误导您)。this.checked会做。
jensgram

@jensgram @fcalderan +1感谢您的提示!我从未见过带switch的toggleClass。我正在删除我的帖子,因为它没有用。抱歉,如此挑剔,但我认为如果没有两次选择“ #checkbox”,此答案将是100%完美的:也许使用$(this)?还是詹斯格拉姆的解决方案?
攻击

@attack当然可以在使用前缓存元素(请参阅代码)。this.checked甚至比$(..)。attr('checked')还要快

4

我发现了一个疯狂的解决方案,用于处理未选中或未选中的复选框问题,这是我的算法...创建一个全局变量,可以说var check_holder

check_holder有3个状态

  1. 未定义状态
  2. 0状态
  3. 1个州

如果选中该复选框,

$(document).on("click","#check",function(){
    if(typeof(check_holder)=="undefined"){
          //this means that it is the first time and the check is going to be checked
          //do something
          check_holder=1; //indicates that the is checked,it is in checked state
    }
    else if(check_holder==1){
          //do something when the check is going to be unchecked
          check_holder=0; //it means that it is not checked,it is in unchecked state
    }
     else if(check_holder==0){
            //do something when the check is going to be checked
            check_holder=1;//indicates that it is in a checked state
     }
});

上面的代码可在许多情况下用于查找是否已选中复选框。其背后的概念是将复选框状态保存在变量中,即打开或关闭时。我希望该逻辑可以用来解决您的问题。


1
解决方案确实是疯狂的,但不是一个好的方法。是的,全局变量可以帮助您解决问题,但是明天几乎可以肯定会成为您的问题。尝试尽可能避免使用它们,这是99%的时间。它们使您不必担心全局状态就无法推理代码。一个全局变量看似无害,但很快就变成了几十个甚至数百个。到过那里,看到的并不漂亮。
bijancn '16

3

检查此代码:

<!-- script to check whether checkbox checked or not using prop function -->
<script>
$('#change_password').click(function(){
    if($(this).prop("checked") == true){ //can also use $(this).prop("checked") which will return a boolean.
        alert("checked");
    }
    else if($(this).prop("checked") == false){
        alert("Checkbox is unchecked.");
    }
});
</script>

1
$('#checkbox').change(function(){
   (this.checked)?$('p').css('color','#0099ff'):$('p').css('color','another_color');
});

1

可能您可以使用此代码来执行操作,因为该复选框处于选中状态或未选中状态。

$('#chk').on('click',function(){
    if(this.checked==true){
      alert('yes');
    }else{
      alert('no');
    }
});


0

最佳实施

$('#checkbox').on('change', function(){
    $('p').css('color', this.checked ? '#09f' : '');
});

演示版

$('#checkbox').on('change', function(){
    $('p').css('color', this.checked ? '#09f' : '');
});
<script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
<input id="checkbox" type="checkbox" /> 
<p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
    eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
<p>
    Ut enim ad minim veniam, quis nostrud exercitation ullamco
    laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
    dolor in reprehenderit in voluptate velit esse cillum dolore eu
    fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est
    laborum.
</p>


0

为什么不使用内置事件?

$('#checkbox').click(function(e){
    if(e.target.checked) {
     // code to run if checked
        console.log('Checked');

     } else {

     //code to run if unchecked
        console.log('Unchecked');
     }
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.