我有一个 <input type="checkbox" />
它通过 jQuery 的 .click
绑定(bind)了一个点击处理程序功能。然后它根据其状态执行一些计算:
$(':checkbox').click(function () {
if (this.checked) {
console.log("ACTIVE");
} else {
console.log("INACTIVE");
}
});
在 UI 中这一切都很好,但是,在我的单元测试中,我想模拟对此元素的点击并确保运行正确的代码。
$(testElement).click();
问题在于处理程序在默认浏览器操作之前 被调用,因此 this.checked
的值被逆转。也就是说,它没有得到它的 checked
属性更改直到我的处理程序运行之后。
有什么办法解决这个问题吗?我可以绑定(bind)其他事件吗?是否有其他方式以编程方式触发点击?
最佳答案
看着这个blog post您可以通过执行以下操作来获得您正在查看的行为:
$( ":checkbox" )[ 0 ].checked = !$( ":checkbox" )[ 0 ].checked;
$(":checkbox" ).triggerHandler( "click" );
并配合使用triggerHandler()
,您将只会触发 jQuery 绑定(bind)的事件,而不是默认行为。
jsfiddle 上的代码示例.
关于javascript - 在 jQuery 中控制触发点击 UI 事件的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343545/