2017-05-11 16 views
0

如何讓Javascript函數只工作一次?如何讓javascript函數只工作一次

if (window.location.hash) { 
     $(document).ready(function() { 
     var id = window.location.hash; 
     $(id).trigger('click'); 
    }); 
     $('li').click(function() { 
      $(this).prependTo($(this).parent()); 
     }); 
    } 

我需要自動點擊鏈接用戶來到網站的li元素。 web.com/#2(列表順序 - 2 1 3 4 5),web.com/#4(列表順序 - 4 1 2 3)。但我想比用戶留在網站與散列url列表元素留在他們的地方,然後用戶點擊例如3列表元素,他必須留下來,他的地方,所以列表順序(4 1 2 3)。我只需要在加載頁面上通過URL散列更改列表順序。

+1

不知道我已經完全明白你想要做什麼,但嘗試添加'$(「禮」) .off('click');'在點擊處理程序中 –

+2

你想做什麼?這很難理解 – Anokrize

+0

我編輯了我的問題。也許它更清晰? – Mantas

回答

0

我解決了它

 if (window.location.hash) { 

      $('li').one('click',function() { 
       if (!window.run){ 
      $(this).prependTo($(this).parent()); 
        window.run = true; 
       } 
     }); 
     $(document).ready(function() { 
      var id = window.location.hash; 
      $(id).trigger('click'); 
     }); 
    } 
+0

這是多餘的; '.one'已經確保它不會運行兩次,所以沒有理由使用'window.run'作爲標誌。 –

0

在您的特定情況下,最簡單的解決辦法是使用.one(),它運行在第一次後解除綁定處理程序:

$('li').one('click',function() { ... } 

另一種方法是有函數在運行後重新定義爲無操作。當沒有一個方便的事件處理程序解除綁定這可能是在某些情況下非常有用:

var oneTimeFunction = function() { 
    console.log("This will only happen once."); 
    oneTimeFunction = function() {}; 
}