私は大まかに次のことを行っています。
var i;
var k = 5;
$('document').ready(function () {
$('#someElement').click(function (e) {
e.stopImmediatePropagation();
i++;
if (i >= k) {
my_function();
});
}
});
my_function() {
alert(i);
$('#myDisplay').text("You have clicked on '#someElement' " + i + "times");
}
「#someElement」をクリックすると、予想どおり「my_function()」が起動しますが、アラート ボックスが 5 回表示されます!!!.
迅速かつ明白な解決策は、my_function() の内容を配置し、それらを '#someElement' に接続された if 制御ステートメントに配置することですが、私は概説した構造を維持することに非常に熱心であり、単純なそうする方法。
何か案は?
アップデート
私は当初、「クリック」イベント内からの関数呼び出しに問題があると想定していました。そうではありませんでした。問題は、ネストされた「ajaxComplete」呼び出しと関係があると思います。
var i = 0;
$('document').ready(function () {
$('<div id="someElement">Click me</div>').appendTo('body');
$('<div id="myDisplay"></div>').appendTo('body');
$('#someElement').click(function (e) {
i++;
$.get("test.html", function(html)
{
$(html).ajaxComplete(function()
{
my_function(i);
});
});
});
});
function my_function(n)
{
switch (n)
{
case 1:
alert(n);
$('#myDisplay').text("this is case " + n);
break
case 2:
alert(n);
$('#myDisplay').text("this is case " + n);
break
case 3:
alert(n);
$('#myDisplay').text("this is case " + n);
break
default:
alert('A great detective always breaks the case. :)');
break
}
}
case ステートメントが前の例の 'if' ステートメントを役に立たなくするので、定数 'k' を省略しました。上記のコードは、私が遭遇した問題をよりよく表しています。
どんな助けでも大歓迎です。:)