1

我在下面的代码中遇到了一个有趣的问题:

<html>
<head>
    <meta charset="UTF-8"/>
    <script src="jquery-1.3.2.min.cache.js">
    </script>
    <script>
        $(function(){
        var c = function(){
                  console.log('checked:' + $('#test').attr('checked'));
                };
        $('#test').click(c);
    });
    </script>
</head>

<body>
    <input id="test" type="checkbox" value="1">test
  </input>
</body>
</html>

问题是当我手动单击复选框时,它将打印

checked:true
checked:false
checked:true
checked:false 
....

但是如果我使用 js 代码触发点击事件,例如:

$('#test').click()

它会像这样打印

checked:false
checked:true

听起来像手动单击,复选框本身将呈现为选中/未选中,然后触发单击事件。

但是,对于 的 JS 代码.click(),情况并非如此。

我的猜测对吗?有没有我可以参考的文档寻求帮助?

4

1 回答 1

2

问题是当我手动单击复选框时,它将打印

已检查:真已检查:假

我得到:

> checked:true
> checked:undefined

attr方法非常糟糕(它曾经混淆属性和属性,可能现在仍然如此),要么直接读取属性,要么使用prop. 编写起来效率更高:

   console.log('checked:' + this.checked);

无论如何,这是我以前的评论:

可能是因为 jQuery 使用它自己的事件注册和触发框架来绕过 DOM 方法。手动单击按钮时,您将获得 DOM 事件序列。使用 jQuery 时,您将获得 jQuery 的事件序列。

于 2012-10-09T05:48:30.753 回答