在jQuery中控制订单触发的点击UI事件
我有一个 ,它有一个通过jQuery的
.click
函数绑定到它的点击处理程序。 然后根据其状态执行一些计算:
$(':checkbox').click(function () { if (this.checked) { console.log("ACTIVE"); } else { console.log("INACTIVE"); } });
这在UI中都很好,但是,在我的unit testing中,我想模拟对此元素的单击并确保运行正确的代码。
$(testElement).click();
问题是在默认浏览器操作之前调用处理程序,因此this.checked
的值被反转。 也就是说,在我的处理程序运行之后,它才会更改其已checked
属性。
有没有办法解决? 我可以绑定一个不同的事件吗? 是否有不同的方式以编程方式触发点击?
查看此博客文章,您可以通过执行以下操作来获得您正在查看的行为:
$( ":checkbox" )[ 0 ].checked = !$( ":checkbox" )[ 0 ].checked; $(":checkbox" ).triggerHandler( "click" );
通过使用triggerHandler()
,您将只触发jQuery绑定的事件而不是默认行为。
关于jsfiddle的代码示例。
尝试
$(":checkbox").change(function(){ if($(this).is(":checked")){ console.log("ACTIVE"); } else { console.log("INACTIVE"); } }); $(":checkbox").attr("checked", true).change();
为什么要对测试jQuery进行unit testing? 直接在匿名函数中使用代码来处理普通的东西,对于更重要的东西,使用可以独立进行unit testing的单独函数。
像这样的东西:
$(':checkbox').click(function () { checkboxClickHandler($(this)); });
在你的unit testing中:
checkboxClickHandler($(':checkbox'));
而你的function:
function checkboxClickHandler(element) { alert(element.is(':checked')); }