2017-01-03 81 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