2017-05-11 13 views
0

Javascript関数を1回だけ動作させるには?JavaScript関数を1回だけ動作させるには

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

あなたがしようとしていることを完全に理解していますが、 '$( 'li')を追加しようとすると、これは便利な場合があります。 .off( 'click'); 'クリックハンドラで –

+2

何をしますか?理解が非常に難しい – Anokrize

+0

私の質問を編集しました。多分それはもっと明確でしょうか? – Mantas

答えて

0

私は、最も簡単な解決策は.one()を使用することです、それをあなたの特定のケースで

 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'はすでに2回実行されないことを保証しているので、' window.run'をフラグとして使用する理由はありません。 –

0

を解決し、初めてそれを実行した後にハンドラをアンバインドした:

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

別のアプローチを持っていることですそれが実行された後、関数はno-opに再定義されます。

var oneTimeFunction = function() { 
    console.log("This will only happen once."); 
    oneTimeFunction = function() {}; 
} 
関連する問題