如何在jQuery中模拟click事件

时间:2011-08-08 21:52:03

标签: jquery

注意:所有这些都在chrome

我正在尝试测试响应单击复选框的内容。我意识到jQuery.click()存在,但它似乎与“本机”点击不同,在点击处理程序期间,复选框的状态尚未更新(因此复选框未选中,您调用.click() ,在处理程序中,复选框仍未选中。如果您实际单击该框,则在处理程序中检查状态。)

我为这个令人困惑的问题道歉,这是一个小提琴http://jsfiddle.net/XBhWy/

单击foo按钮,注意按钮处理程序说已经检查过,但是复选框处理程序说它没有被检查(即使ui显示了一个复选标记)。现在,单击复选框本身。请注意,click事件处理程序正在报告您希望它报告的内容。

我的问题是如何模拟实际点击框时发生的事情。

现在,我尝试了一个像这样的更好的模拟事件

$.fn.check = function() {
  if ($(this).is(':checked')) {
    $(this).attr('checked', 'checked');
  } else {
    $(this).removeAttr('checked');
  }
  $(this).click();
}

不幸的是(有点混乱),它没有用。

之前有人碰到过吗?可以完成吗?

请注意,我不是在寻找click方法。

2 个答案:

答案 0 :(得分:1)

来自http://api.jquery.com/trigger/

  

尽管.trigger()模拟事件激活,但是使用合成的事件对象,它并不能完美地复制自然发生的事件。

所以我猜这是一个众所周知的事情。在这种情况下,它会改变某些事物的顺序。

答案 1 :(得分:1)

在复选框真正更新之前,复选框click()事件中声明的用户指定函数似乎会触发。我玩弄它并发现change()监听器按预期运行。

jsfiddle