我有一个带有两个选项卡的 jQuery Mobile 导航栏:
<div data-role="navbar">
<ul>
<li><a href="#" class="tab ui-btn-active">Inbound</a></li>
<li><a href="#" class="tab">Outbound</a></li>
</ul>
</div>
单击选项卡时,我想
- 如果它已经是活动选项卡,则什么也不做,
- 如果单击的选项卡成为新的活动选项卡,请执行某些操作。
根据文档,活动选项卡有 class ui-btn-active
,所以我监听点击并查看点击按钮上是否存在该类:
$('.tab').click(function() {
if ( $(this).hasClass('ui-btn-active') ) {
// already active, do nothing
console.log("already active");
} else {
// newly active, do something
console.log("newly active");
}
});
这已经完美地工作了几个月,但我现在看到它完全取决于活动类从一个中删除并添加到另一个的时间,相对于if
评估的时间。现在,在一些不相关的代码更改之后,它在桌面浏览器上和以前一样工作,但在移动浏览器上,我只是已经 active,无论单击哪个按钮 - 即if
发生得太晚了。
最聪明的方法是什么?有人可以解释事件的顺序,以及事件的顺序不一致是如何发生的吗?是否click
适合用于触摸屏设备?
编辑:
我尝试使用.on()
并检查事件对象来侦听父级上的冒泡事件,希望它包含的类列表会更准确,但行为是相同的:
$('ul').on('click','a',function(event) {
alert(event.currentTarget.classList.contains('ui-btn-active'));
});
如希望的那样,单击非活动选项卡会false
在桌面浏览器和true
移动浏览器上返回。