我正在开发一个在某些情况下使用onHashChange
事件侦听器的 Web 应用程序,并且手动单击带有href="#hash"
的链接效果很好。但是当我使用 jQuery 的$('a[href=#"hash"]').trigger('click')
触发单击同一链接时$('a[href=#"hash"]').click()
地址栏中的哈希没有改变。
是我做错了什么吗? 或者我应该为此目的使用另一种方法?
.HTML
<a href="#hash">Do Something</a>
.JS
// Not working
$('a[href="#hash"]').click();
// Not working
$('a[href="#hash"]').trigger('click');
这里的新人希望不要自欺欺人。我只是想也许我在网站上使用的这段代码中的某些内容可能会对您有所帮助。它似乎与您描述的内容有点相似。
$(document).ready(function(){
$('a[href^="#"]').on('click',function (e) {
e.preventDefault();
var target = this.hash;
var $target = $(target);
$('html, body').stop().animate({
'scrollTop': $target.offset().top
}, 900, 'swing', function () {
window.location.hash = target;
});
});
});
你写的是真的(足以调试 jQuery 源代码):触发器单击事件在锚点上不起作用。
为了实现您正在尝试的操作,您可以获取 dom 元素,然后触发点击:
$('a[href="#hash"]').get(0).click()
这只会起作用。
click
方法(当由 jquery
使用时)触发您使用el.click(function..
和el.on('click', function...
注册的click
您可以创建一个新MouseEvent
并将其直接调度到相关元素:
e = document.createEvent('MouseEvents');
e.initEvent("click", true, true);
$('a[href="#hash"]')[0].dispatchEvent(e)
上面的代码可以在Chrome,Firefox和IE中工作
或者只使用 元素的 click
事件(它不会使用 jquery 的 click
函数,而是浏览器的 click
函数):
$('a[href="#hash"]')[0].click()
请注意,由于安全原因,此代码可能无法在多个浏览器中工作。