触发点击链接不会更改位置哈希

时间:2017-01-03 15:53:24

标签: javascript jquery fragment-identifier

我正在处理在某些情况下使用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');

3 个答案:

答案 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使用时)会触发您使用clickel.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()

这只会起作用。