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



我正在开发一个在某些情况下使用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()

请注意,由于安全原因,此代码可能无法在多个浏览器中工作。

相关内容

  • 没有找到相关文章

最新更新