小さなjQueryプラグインを作成するアイデアはありましたが、eval
に依存することなくこれを行う方法がわかりません。Javascript関数に条件テストを送信するにはどうすればいいのですか?
は、ここでは、コードです:
var testMe = 1;
$.extend({
once : function(condition, duration, callback) {
window[ "once" ] = window.setTimeout(function() {
if (condition)
{
callback.apply();
window.clearTimeout(window[ "once" ]);
} else {
window[ "once" ] = window.setTimeout(arguments.callee, duration * 1000);
}
}, duration * 1000);
}
});
$.once(testMe == 2, 5, function() {
alert("Match!");
});
$.once()
が呼び出されているとき、最初のパラメータは、その後評価さのように見えますし、唯一それが条件パラメータに送信され、この時点での値です。
$.once("testMe == 2" ...
とはeval
の使用withing別の方法がありますif (eval(condition))
使用:私が見つけた唯一の方法は、それを文字列として送信するのですか?
ありがとうございます。
編集:
var testOne = 1,
testTwo = 1;
$.extend({
once : function(name, conditionFn, duration, callback) {
if (typeof duration == "function")
{
callback = duration;
duration = 5;
}
window[ "once" + name ] = window.setInterval(function() {
if (conditionFn())
{
callback();
window.clearInterval(window[ "once" + name ]);
}
}, duration * 1000);
}
});
//Examples
$.once("testOne", function() {
return testOne == 2
}, 2, function() {
alert("testOne == 1");
});
$.once("testTwo", function() {
return testTwo == 2
}, 2, function() {
alert("testTwo == 1");
});
それは私の元のコードのはるかにクリーンなバージョンですね。 – Cybrix