2017-05-17 9 views
-2

のサイズを変更するときに、ページのサイズを変更する際、私はあなたがクリックイベントにあなたが呼び出すたびにアンバインドする必要がMy機能は、私はページ

<button></button> 

function example(){ 
    $('button').click(function(){ 
    alert(); 
    }); 
} 


$(window).bind('resize load', function(){ 

    if ($(this).width() < 768){ 
    example(); 
    } 
}); 

https://jsfiddle.net/vcode/yh1m2vre/

+1

サイズ変更を行うたびにクリックイベントをバインドするため、幅が768を下回るため、正確に何をしますか? – nikhil

+0

サイズを変更するたびに、新しいクリックイベントをバインドします。だからあなたは一度サイズを変更した後、あなたはクリックハンドラを持っています。再度サイズを変更すると、2つのクリックハンドラーがあります(同じことをします)。次に4、次に8、次に16などとなります。 – David

+0

はい、私は気づいた。私はこれをどうやって防ぐことができないのか分かりません。 – vulkan

答えて

2

私のページに一度作業する必要が複数回実行されていますあなたの機能は、このようにすることができます:

function example(){ 
    $('button').off().on("click", function(){ 
     alert(); 
    }); 
} 

こうすることで、イベントの重複を防ぐことができます。

他の解決策は、クリックイベントを関数外にバインドしてクリックアクションをトリガーすることです。あなたは、このようにそれを行うことができます。

$('button').on("click", function(){ 
    alert(); 
}); 

function example(){ 
    $('button').trigger('click'); 
} 
+0

まさに私が望む(最初の機能)。ありがとうございました 。 – vulkan

0

は、イベントリスナーを追加します。他の人のよう

function callbackFunc() { 
     callAnOtherFunction(); 
    } 

    // listen for events 
    window.addEventListener("resize", callbackFunc); 
2

をコメントで説明してきたあなたがたびresizeを複数の新しいclick()イベントハンドラをバインドしているので、問題がありますイベントが発生します。

この問題を解決するには、論理を反転して、単一のクリックハンドラ内で画面の幅を確認し、それに応じて動作させる方がよいでしょう。この方法で編成ロジックを持つ

$('button').click(function(){ 
    if ($(window).width() >= 768) 
    return; 

    console.log('window size < 768'); 
}); 

はあなたしかページの寿命のための単一のイベントハンドラを持っているのではなく、潜在的に新しいものを何百回も、そうでない場合は数千人が、追加/削除することを意味します。

+1

@ freedomn-mありがとう! –

関連する問題