Javascript 在jQuery中控制顺序触发的单击UI事件
我有一个Javascript 在jQuery中控制顺序触发的单击UI事件,javascript,jquery,events,Javascript,Jquery,Events,我有一个,它通过jQuery的绑定了一个click处理程序。然后根据其状态执行一些计算: $(':checkbox').click(function () { if (this.checked) { console.log("ACTIVE"); } else { console.log("INACTIVE"); } }); 在UI中这一切都很好,但是,在我的单元测试中,我希望模拟单击此元素,并确保运行正确的代码 $(testElement
,它通过jQuery的绑定了一个click处理程序。然后根据其状态执行一些计算:
$(':checkbox').click(function () {
if (this.checked) {
console.log("ACTIVE");
} else {
console.log("INACTIVE");
}
});
在UI中这一切都很好,但是,在我的单元测试中,我希望模拟单击此元素,并确保运行正确的代码
$(testElement).click();
问题是处理程序在默认浏览器操作之前调用,因此this.checked的值被反转。也就是说,只有在我的处理程序运行之后,它才会检查其属性
这有什么办法吗?有没有其他我可以参加的活动?是否有其他方式以编程方式触发单击?试试看
$(":checkbox").change(function(){
if($(this).is(":checked")){
console.log("ACTIVE");
} else {
console.log("INACTIVE");
}
});
$(":checkbox").attr("checked", true).change();
试一试
考虑到这一点,您可以通过执行以下操作来获得您所看到的行为:
$( ":checkbox" )[ 0 ].checked = !$( ":checkbox" )[ 0 ].checked;
$(":checkbox" ).triggerHandler( "click" );
使用,您将只触发由jQuery绑定的事件,而不是默认行为
编写示例。查看此示例,您可以通过执行以下操作获得您正在查看的行为:
$( ":checkbox" )[ 0 ].checked = !$( ":checkbox" )[ 0 ].checked;
$(":checkbox" ).triggerHandler( "click" );
使用,您将只触发由jQuery绑定的事件,而不是默认行为
编写示例。为什么要用测试jQuery来增加单元测试的负担?对于普通的东西,直接在匿名函数中使用代码;对于更重要的东西,使用可以独立进行单元测试的单独函数
大概是这样的:
$(':checkbox').click(function () { checkboxClickHandler($(this)); });
在单元测试中:
checkboxClickHandler($(':checkbox'));
你的职能是:
function checkboxClickHandler(element)
{
alert(element.is(':checked'));
}
为什么要用测试jQuery来增加单元测试的负担?对于普通的东西,直接在匿名函数中使用代码;对于更重要的东西,使用可以独立进行单元测试的单独函数
大概是这样的:
$(':checkbox').click(function () { checkboxClickHandler($(this)); });
在单元测试中:
checkboxClickHandler($(':checkbox'));
你的职能是:
function checkboxClickHandler(element)
{
alert(element.is(':checked'));
}
这实际上不会更改复选框的状态。这实际上不会更改复选框的状态。是的,但首先很难获得对确切函数的引用,其次,这对回归测试没有帮助。我想看看是否有其他代码添加了影响我的程序的另一个处理程序。是的,但首先很难获得精确函数的引用,其次,这对回归测试没有帮助。我想看看是否有其他代码添加了影响我的程序的另一个处理程序。