我正在处理在某些情况下使用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');
答案 0 :(得分:4)
这里的新人希望不会对自己有所了解。我只是想在我的网站上使用的这段代码中的某些东西可能对你有帮助。它有点类似于你所描述的。
$(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;
});
});
});
答案 1 :(得分:2)
click
方法(由jquery
使用时)会触发您使用click
和el.click(function..
el.on('click', function...
个事件
您可以创建新的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()
请注意,出于安全原因,此代码可能无法在多个浏览器中使用。
答案 2 :(得分:1)
你写的是真的(它足以调试jQuery源代码):触发器点击事件对锚点不起作用。
为了实现您的目标,您可以获取dom元素然后触发点击:
$('a[href="#hash"]').get(0).click()
这只会起作用。