我需要在我的web應用程序中具有某些功能,當用戶單擊並保存元素時發生特定操作。想想它就像在Android上長按。Javascript使用setTimeout單擊並按住元素
我有我的div:
<div id="myDiv"
onmousedown="press()"
onmouseup="cancel()"
onmouseout="cancel()"
onmousemove="cancel()">Long Click Me</div>
和我的javascript:
var down = false;
function press()
{
down = true;
setTimeout(function() { action(); }, 1500);
}
function cancel()
{
down = false; // this doesn't happen when user moves off div while holding mouse down!
}
function action()
{
if (!down)
return; // if the flag is FALSE then do nothing.
alert("Success!");
down = false;
}
這工作只要我要做的就是按下並按住元素。我有onmouseout
和onmousemove
事件調用cancel(),因爲我希望用戶可以選擇在action()開始之前更改主意並將鼠標從元素上移開。
不幸的是,我的代碼似乎並沒有這樣做。 事實上,如果使用點擊一下,將鼠標從div上移開並在012秒之前在之前釋放,那麼action()將不會按預期保留。
編輯:感謝您的輸入所有人,但事實證明,我只是有點特殊並沒有看到,我忘了在我的HTML大寫字母在我的onmouseout。我上面給出的示例代碼應該完全按照預期工作。
這是發生在所有瀏覽器或只是一些?爲什麼不讓[jsfiddle](http://jsfiddle.net/)讓其他人測試它?也不要使用布爾,只需使用'var',JavaScript是動態輸入的。 –
我在我的代碼中有var,當我寫這個例子的時候,我不小心寫了bool。 – Ozzah
夥計們,不要回答。我問了這個問題,我很抱歉。問題不在於動作()開始 - 我有一個測試:if(!down)return;所以這不是問題。問題在於,如果用戶按下鼠標按鈕將鼠標移出div,則不會調用cancel()。這只是一個玩具的例子來說明我的問題;我實際上*需要*在1.5秒之前移除div時調用cancel(),否則之後短時間點擊將不起作用等。 – Ozzah