2017-01-03 84 views
5

我正在研究一个web应用程序,在某些情况下使用onHashChange事件侦听器,并且手动点击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

你可以用小提琴演示这个吗? – Anubhav

+0

您是否在您的点击处理程序中设置了preventDefault()? – AndFisher

+1

愚蠢的问题。为什么触发点击链接?为什么不以编程方式处理它? – allnodcoms

回答

1

你写的是真的(它足以调试jQuery源代码):触发器点击事件不起作用的锚点。

为了达到你正在尝试,你可以得到的DOM元素,然后火点击:

$('a[href="#hash"]').get(0).click() 

这只会工作。

2

click的方法(通过jquery当使用时)触发您注册使用el.click(function..el.on('click', function...

click事件0

您可以创建一个新的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() 

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

+0

是不是jQuery自己的触发器点击这个? –

+0

更新后的答案更多信息 – Dekel

+0

对不起,但我不明白。如果我触发点击具有实际(url)href的链接,位置将变为给定的href。但它并不适用于只有散列的href。这是为什么?你建议为点击创建新的事件,但我想知道为什么点击不是做同样的事情! –

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; 
    }); 
    }); 
    }); 
+0

所以你手动改变位置哈希,对吧?我想知道为什么点击触发方法不是做同样的事情?一旦你在一个元素上调用'trigger('click')',所有事情都是当用户点击它时,但是手动点击而不是触发器的URL发生变化! –

+0

我不知道anchor.hash +1 – Musa

+0

就像我说的。这看起来与我阅读的内容相似,我希望那里会有一些东西会触发解决方案!抱歉。希望我可以帮助更多。 我不知道你是什么意思手动。 JS只是在HTML中标记#locations之后工作。 这是在[codepen](http://codepen.io/awaybackhome/full/WomzKM/) – awaybackhome