2017-06-21 17 views
0

を行って前に私がイベントを持っている:jQueryのチェック]チェックボックス変更イベントのproccessは

$(document).on('change', '.many-checkbox', function() { 
    doSomething() 
}); 

doSomething()はちょっと重いですので、彼らが実際に/チェックを外してチェックされる前に、クラスmany-checkboxとチェックボックスは、遅延を持つことになります。

これらの遅延を削除したいと考えています。

doSomething()が完了する前に、どうすればチェック/チェックを外すことができますか?

ありがとうございました。

+0

StackSnippet/JSFiddleでこれを再現できますか?問題が他の場所にあるように見えます。または 'doSomething'で。 – Tushar

+1

BTW、 '$(this).prop( 'checked'、$(this).prop( 'checked'));'は何もしませんが遅延を追加します。 – Tushar

+0

問題は 'doSomething'にあると私は確信しています。そのため、私はそれをバイパスしたいのです。だから、 'doSomething'が完了する前にチェックボックスをオンにしたままにしておきます。 –

答えて

0

doSomething()の機能をsetTimoutの方法に置き換えることができます。例:

$(document).on('change', '.many-checkbox', function() { 
    setTimeout(function(){ 
    // do something 
    }, 100); 
}); 

結果として、JavaScriptの実行が一時停止され、レンダリングスレッドが追いつくことができます。

+0

なぜですか?そして、それはどのように機能をより速く実行させるでしょうか? – Tushar

+0

@ Tushar、これは高速ではありません。しかし、それは別の行動の後に実行されます。申し訳ありませんが、私はこの解決策の原因を覚えていません。 – Alexander

+0

@ Tushar、あなたの質問に答えた[トピック](https://stackoverflow.com/a/779785/7914637)が見つかりました。 – Alexander

0

私はここで間違ったことが起こっていると思われますが、本体全体の変更を聴取してから、.many-checkboxクラスにフィルタリングすることから始めてください。

は、チェックボックスへの変更を直接聞く:

$('.many-checkbox').on('change', function() { 
    doSomething(); 
}); 

あなたがやっていることdoSomethingの私たちを見るならば、我々は多分、非同期にそれを作ることができます。

+0

私は申し訳ありませんが、その方法は非同期にすることが複雑になります。あなたが言うように、それには間違いがたくさんあります、私の悪いコード〜しかし、あなたの答えは非常にありがとう、それほど感謝します。 –

関連する問題