GWT と GWTQuery を使用して、シングル クリックとダブル クリックを区別するコードを作成しようとしています。ここでアイデアを得ました。だから私はそれを次のようにGWTに翻訳しました:(私のアプリはグローバル変数を持つことができないので、代わりに要素属性でその部分をやっています):
$("img").live("click", new Function() {
public boolean f(Event event) {
String clicksString = $(event).attr("clicks");
int clicks = Integer.parseInt(clicksString);
clicks++;
$(event).attr("clicks",String.valueOf(clicks));
Timer t = new Timer() {
@Override
public void run() {
Window.alert("Click");
$(event).attr("clicks","0");
}
};
if (clicks == 1) {
t.schedule(200);
}
else {
t.cancel();
$(event).attr("clicks","0");
Window.alert("Double Click");
}
return true;
}
});
ここで、画像がクリックされると、 Single Clickを示すアラートがポップアップ表示され、ユーザーが (200 ミリ秒以内に) ダブルクリックすると、 Double Clickがポップアップ表示されます。シングルクリックでは問題なく動作しますが、ダブルクリックすると、ダブルクリックアラートがポップアップしても、[ OK ] をクリックして削除すると、シングルクリックアラートが削除されるのを待っています。
t.cancel()
どういうわけか、ダブルクリックで起動していないと思います。誰でもこれを修正する方法を教えてもらえますか?
アップデート:
受け入れられたソリューションはアラートに対してはうまく機能しますが、event
パラメーターも必要な場合は、少し調整する必要があります。それを行った後、再び問題が発生し、タイマーがクリアされず、ダブルクリックとクリックの2つのアラートが表示されます..:
$("img").live("click", new Function() {
int clicks = 0;
public boolean f(Event event) {
Timer t = new Timer() {
@Override
public void run() {
clicks = 0;
// Here I need the event paramater
}
};
if (clicks++%2 == 0) {
t.schedule(5000);
}
else {
t.cancel();
clicks = 0;
// Here also I need the event paramater
}
return true;
}
});
@Manolo による更新: 以下の私のコメントに基づくと、最後のコードは次のようになります。
$("img").live("click", new Function() {
int clicks = 0;
Event event;
Timer t = new Timer() {
@Override
public void run() {
// Use the event
event....
}
};
public boolean f(Event event) {
this.event = event;
if (clicks++%2 == 0) {
t.schedule(5000);
} else {
t.cancel();
// Use the event
event....
}
return true;
}
});