我设置了以下 jQuery(版本 2.0.3)来切换触摸设备和桌面上的导航下拉菜单:
$(document).ready(function() {
console.log("Ready handler triggered");
$(document).on({ click : ToggleNav, touchstart : ToggleNav }, "#NavToggle");
});
我的ToggleNav()
功能:
ToggleNav = function(event) {
console.log(event.type);
$('ul#Navigation').slideToggle(200);
event.preventDefault();
}
以及相关的 HTML:
<div id='NavToggle'>Navigation</div>
<ul id='Navigation'>
<li><a href='/' title='Home'>Home</a></li>
<li><a href='/page-1.php' title='Page 1'>Page 1</a></li>
<li><a href='/page-2.php' title='Page 2'>Page 2</a></li>
<li><a href='/page-3.php' title='Page 3'>Page 3</a></li>
<li><a href='/page-4.php' title='Page 4'>Page 4</a></li>
</ul>
这适用于我迄今为止测试过的所有浏览器(Mac、Windows 和 Chrome for Android),除了IE9,32位和 64 位版本。
有趣的是,如果我打开开发者工具并刷新页面,它将开始工作,然后我可以关闭开发者工具,无论我刷新多少次,它都会继续工作。也就是说,直到我关闭并重新打开浏览器。
已event.type
成功记录到控制台(“LOG:click”),但 slideToggle() 显然没有被触发,并且没有错误被记录到控制台。
有没有人遇到过这种情况,并且知道原因和/或解决方案?
更新 1:我更新了ToggleNav()
功能以提醒,event.type
因为打开控制台查看日志也使 IE9 开始工作。IE9 甚至不会显示警报,因此 ToggleNav() 函数甚至没有被触发。
更新 2:经过更多测试,我认为问题出在原始的 on() 处理程序上。当我将console.log("Ready handler triggered");
行改为 analert()
时,它开始在 IE9 中工作。