私はリスナーのための多くの必要性を与えているサードパーティ製のJavaScriptを使用しています。たとえば、特定のdivがロードされているとき、私はそれを使って何かしたい。それはオブジェクトのスタイルを変えるので、私はそれがあるスタイルを持つのを見る必要があります。 idやクラスが存在するときに動作する関数を構築しました。ここに現在のID関数があります。ご覧のとおり、jQueryが使用されています。条件が成立したときにアクションを実行するJavascriptリスナー関数を作成するにはどうすればよいですか?
function whenLoaded(element_id, action) {
if ($(element_id)) {
action();
}
else {
setTimeout("whenLoaded('"+element_ids+"',"+action+", '"+stop_on+"')", 500);
}
}
私は本当に複数の条件を付けることができるものが必要です。たとえば:
whenTrue(
($('popup') && $('popup').style.width == '500px'),
$('popup').style.width = '0'
);
条件(第1パラメータ)を再帰的に確認することが期待されます。これらの条件が満たされたら、アクションを実行します。
私はeval()を使用してこれを達成できましたが、使用しないように警告されています。理由を覚えていません。それが言われている、私は別の方法でこれを達成したいと思います。
のeval()ソリューション:
whenTrue(
"($('popup') && $('popup').style.width == '500px')",
"$('popup').style.width = '0'"
);
function whenTrue(condition, action) {
if (eval(condition)) {
eval(action);
}
else {
setTimeout("whenTrue('"+condition+"','"+action+"')", 500);
}
}
私は、これはあなたがなりたいものを本当に、本当にわからないんだけどやって多くのタイムアウトトリガーに頼っていると、アプリは遅くなったり反応しなくなったりするので、あらゆるものが競合状態に敏感になり、コードに大きな魔法のレイヤーが追加されます。もっと普通のアーキテクチャを使用することはできませんか? – hugomg
ところで、条件(とコールバック)を渡す一般的な方法は、それらを関数として渡すことです(評価する必要がある文字列の代わりに)。 – hugomg