0

我有一个javascript函数,每次单击复选框时都会设置一个变量:

      function handleClick(cb) {
         alert('entered function');
          setTimeout(function () {

        if (cb.checked ) {
               $("#IsChecked").val('true');
           }
            else
               $("#IsChecked").val('false');

        alert('now my value is: '+ $("#IsChecked").val());
       }, 0);
   }

这是我的复选框:

  <input id="MyCheckBox" type="checkbox" value="true" onclick="handleClick(this);" 
  name="MyCheckBox" checked="checked">

每次选中复选框时,这都很有用。但是现在我需要知道当用户单击一个按钮并且之前从未触摸过该复选框时是否选中了该复选框。所以我这样做:

   $(document).ready(function () {
    $("#IsChecked").val('default');

    $('#btnCheck').click(function (e) {
        var isComplete = $("#IsChecked").val();
        if (isComplete == 'default') {
            var cb = $('#MyCheckBox');
            handleClick(cb);
         alert('after handleClick ischecked is: ' + $("#IsChecked").val());
         }
     });

});

当我单击我的按钮并默认选中复选框时,我会按以下顺序收到这些警报:

 entered function
 after handleClick ischecked is: default
 now my value is: false

如果我选中复选框来切换它,我会按预期收到这些警报:

 entered function
 now my value is: false

在我的 handleClick 事件中,setTimeout 是因为 IE 而存在的,所以我无法摆脱它。我如何检查是否选中了复选框而无需单击复选框本身?谢谢

4

3 回答 3

2

我如何检查是否选中了复选框而无需单击复选框本身?

$('#MyCheckBox').prop('checked')将随时告诉您该复选框是否已选中。

但是,如果您不仅想测试其状态,还想执行您的handleClick函数,请注意该函数需要一个DOM 元素,而不是 jQuery 对象作为参数。
如果您将 jQuery 对象传递给您的函数,那么cb.checked将始终评估为false,因为 jQuery 对象没有checked属性(只有 DOM 元素有)。

您必须将函数调用更改为:

handleClick(cb.get(0));

从 jQuery 对象中提取 DOM 元素。

于 2012-07-13T17:21:05.917 回答
1

如果您想从按钮单击事件中检查该复选框。

$("#IsChecked").is(':checked'); //returns boolean
于 2012-07-13T17:17:51.503 回答
1
 How can i check to see if a checkbox is checked without having to click 

您可以使用 val() 方法查看是否在带有 click 事件的 javascript 中选中了复选框

$("#MyCheckBox").is(':checked')​​​​​​
于 2012-07-13T17:18:30.837 回答