2013-05-28 46 views
0

我有一些循環在這裏,代碼解釋。哈希改變取消雙觸發(「點擊」)

 $(document).ready(function(){ 
      var newHash  = ""; 
      $('a').click(function(event) { 
       var id = $(this).attr('href'); 
       alert(id); 
       //Do something with selector with id that is clicked 

       window.location.hash = $(this).attr("href"); 
       event.preventDefault(); 

      }); 
      $(window).bind('hashchange', function(){ 

       newHash = window.location.hash.substring(1); 

       if (newHash) { 
        $("ul li." + newHash + " a").trigger("click"); 
       }; 

      }); 

      $(window).trigger('hashchange'); 
     }) 


    <ul> 
     <li class="first"><a href="#first">first</a></li> 
     <li><a href="#second">second</a></li> 
     <li><a href="#third">third</a></li> 
    </ul> 

我用BA-hashchange插件由Ben Alman 這是活生生的例子 - 當你點擊「#first」你有2個警報 但>EXTERNAL LINK ON MY SERVER

通知時改變了哈希粘貼鏈接 - >CHANGED HASH 您只有一個提醒。

它像一個循環,當你點擊鏈接,您得到的點擊和新的哈希從改變URL觸發警報。 所以你有2個警報。

我只想要1個提醒。 在這種情況下。你粘貼鏈接其從哈希名稱假設的觸發鏈接,你得到1警報。 當你點擊鏈接時,它會改變散列值,但不會觸發它改變這個散列值。

回答

0

您收到兩個警報,因爲你是有效的「第一」鏈接點擊兩次當您加載網頁時沒有一個哈希值。這是正在發生的事情:

  1. 訪問your site
  2. 你「hashchange」調用處理程序(因爲某種原因,你叫$(window).trigger('hashchange'),但是因爲沒有newHash價值,什麼都不會發生
  3. 點擊「第一」
  4. 你的點擊處理程序被調用,調用alert()(第一個警報!),然後散改變
  5. 由於哈希是從你的點擊處理程序中改變了,你的「hashchange」處理程序被調用而現在由於newHash有一個有效的值,你的處理程序再次點擊鏈接(以編程方式),你會得到第二個警報。

當您使用預設哈希加載該頁面,出現了一組類似的事件:

  1. 訪問your site與哈希集合
  2. 你「hashchange」處理程序被調用,但不像前現在有一個非空的newHash值,所以你的代碼以編程方式點擊第一個鏈接,你會得到一個警報。哈希被設置爲與之前相同的值,所以hashchange處理程序不做任何事情。
  3. 點擊'第一'
  4. 你的點擊處理程序被調用,alert()被調用,但你的散列保持不變,所以你的hashchange處理程序不會被調用。所以在這種情況下,您會收到1條警報。

這不是完全清楚你要完成......因爲如果你只是想操縱的哈希值,可以從hashchange處理程序這樣做是什麼 - 爲什麼你hashchange處理程序點擊您的鏈接?同樣,如果你只是想操縱一些綁定到你的鏈接的屬性,你可以在點擊處理程序中這麼做 - 你爲什麼要把它粘在哈希中?

+0

我知道它沒有意義的,我所做的Cuz其某種圈子。我想要創建一些觸發hashchange並單擊鏈接的函數,而不是像它發生的那樣加倍。我不知道如何做到這一點。這就是爲什麼我寫這個問題。我想要哈希改變例如滾動網頁,當我只是複製some1鏈接,他得到的位置和行動。 –

+0

好吧,那些問題現在很愚蠢,我得到了我想要的,以及如何去做。謝謝 –

0

問題沒有意義,現在解決了。在這種情況下,我只需要。

$(document).ready(function(){ 
     var newHash  = ""; 
     $('a').click(function(event) { 

      //Do something with selector with id that is clicked 

      window.location.hash = $(this).attr("href"); 
      event.preventDefault(); 

     }); 
     $(window).bind('hashchange', function(){ 

      newHash = window.location.hash.substring(1); 

      if (newHash) { 

      alert(newHash); 
      }; 

     }); 

     $(window).trigger('hashchange'); 
    }) 

這是微不足道的Cuz我的問題是複雜的,但我需要用它來睡覺理解