2017-02-08 7 views
-2

たぶん私はここにすべてのコードを書くことはできませんが、私はこれがあると思い複数の同じアクションを取得し使用することは私の問題を説明することができ、動的のonClickを追加します。にはJavaScriptを有効にし

for(var i = 0 ; i < 5 ; i++) { 
 
    $('#mybutton').on('click', function() { return false; }); 
 
    $('#mybutton').on('click', function() { myfunction('123') }); 
 
} 
 

 
function myfunction(text){ 
 
    console.log(text); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button id = 'mybutton'> My Button </button>

そして結果:

myfunctionが5回実行されます。

私の質問はです:

のMyFunctionを避けるために、どのように私は私の場合のためにそれを必要とする原因をループ削除せずに(私はそれを1回実行したい)5回実行?私はonClickイベントを削除しようとしますが、動作しません。

+0

は一度だけクリックしてください:D –

+3

結合事象** 10 ** for' 'で同じ要素の回。 'for'を削除するだけです。 – Tushar

+0

'for'を削除できない場合は、イベント*を外部にバインドするだけです。 –

答えて

3

(あなたが本当にforループ内のイベントを添付する必要がある理由私はよく分からない)がありますが、接続する前に、クリックイベントをdettachことができ次はjQueryメソッドを使用して.off()です。

off()は、イベントハンドラを削除します。

例:

$('#mybutton').off('click').on('click', function() { myfunction('123') }); 

・ホープ、このことができます。

for(var i = 0 ; i < 5 ; i++) { 
 
    $('#mybutton').off('click').on('click', function() { myfunction('123') }); 
 
} 
 

 
function myfunction(text){ 
 
    console.log(text); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button id = 'mybutton'> My Button </button>

+0

私には完全に不要です。 – Tushar

+0

私にも、しかしOPは_withoutが私のcase_のために必要なためにループを取り除くと言うので、私はそれに答えようとしています。 –

+2

これは最高の答えだと思いますが、それは一番クリーンな方法です。私は '.once();'のようなものを見つけようとしていました。それは存在し、それを適用しますが、おそらくそれをループして5回実行します。 x) – FllnAngl

0

は以下のようにそれを実行してくださいありがとう:

for(var i = 0 ; i < 5 ; i++) { 
    $('#mybutton').on('click', function() { return false; }); 
    if (i == 0) 
     $('#mybutton').on('click', function() { myfunction('123') }); 
} 
1

次のロジックを改善することができます:

const myfunction = function (a) {console.log(a)}; 
 

 
const callback1 = function() { return false; }; 
 
const callback2= function() { myfunction('123') }; 
 

 
$('#mybutton').on('click', function (event) { 
 
    for (var i=0 ; i<=5 ; i++) { 
 
     callback1(); 
 
     callback2(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button id="mybutton">click me</button>

+0

ここでは 'callback1'の使用法は表示されません。単に' false'を返すだけです。注:クリックされた要素のデフォルトのアクションとイベントのバブリングを防ぐことはできません。 – Tushar

+0

質問者が自分のコードを公開しておらず、アイデアが一般的であることを確かめてください。実際には 'callback1'には別のロジックが含まれていると確信しています –

+0

' $( '#mybutton')。on( 'click'、function (){return false;}); 'は親にイベントバブリングを停止します。あなたのコードでは、それはしません。 OPのコードと同じにするには、 'return callback1()'をイベントハンドラの最後に追加します。私はそこから偽を返す新しい関数をなぜ作成したのかも分かりません(その関数内の唯一のコードです_)。 – Tushar

0

オーバーエンジニアリングよりダイナミック&エレガント&何かを持っているために、あなたはTasks CLASを使用することができますすべてのコールバックは、同じ引数を受け取ると仮定すると、以下のようにS:

class Tasks { 
 
    constructor(...tasks) { 
 
    this.tasks = tasks; 
 
    } 
 
    
 
    run(times, ...args) { 
 
    return Array.from({length: times}, (v, k) => k+1).map(iteration => 
 
     this.tasks.map(task => task(...args))     ) 
 

 
    } 
 

 
} 
 

 
const myfunction = function (a) {console.log(a)}; 
 
const callback1 = function() { return false; }; 
 
const callback2= function() { myfunction('123') }; 
 

 

 
$('#mybutton').on('click', function (event) { 
 
    new Tasks(callback1, callback2) 
 
     .run(5, event); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="mybutton">click me</button>

関連する問題