У меня есть функция document.onclick, которую я хотел бы задержать. Я не могу понять синтаксис правильно.
Мой оригинальный код
<script type="text/javascript">
document.onclick=check;
function check(e){do something}
Я попробовал ниже, но этот код неверен, функция не выполнялась и ничего не произошло.
<script type="text/javascript">
document.onclick=setTimeout("check", 1000);
function check(e){do something}
Я попробовал следующий набор, функция была выполнена, но без задержки.
<script type="text/javascript">
setTimeout(document.onclick=check, 1000);
function check(e){do something}
Какой правильный синтаксис для этого кода.
Tia
Редактировать:
Все решения были хорошими, моя проблема заключалась в том, что я использовал функцию check для получения идентификатора элемента, по которому щелкали. Но после задержки «память» о том, на что нажимали, отсутствует, поэтому остальная часть функции не выполняется. Джимр написал краткий код для сохранения события клика.
Код, который работает (не работает в IE6)
document.onclick = makeDelayedHandler( check, 1000 );
// Delay execution of event handler function "f" by "time" ms.
function makeDelayedHandler( f, time)
{
return function( e )
{
var ev = e || window.event;
setTimeout( function()
{
f( ev );
}, time );
};
}
function check(e){
var click = (e && e.target) || (event && event.srcElement);
.
.
.
Спасибо вам всем.
Обновление: решение Кеннебека работает для IE6.
5 ответов
window.twotimer=function(e){
if(arguments[1]!= 'timer'){
// If the 'timer' argument was not passed,
// the function was called from the event,
// so call it again with a timer
e= window.event || e;
var target= e.target || e.srcElement;
setTimeout(function(){return twotimer(target,'timer')},1000);
if(e.stopPropagation) e.stopPropagation();
e.cancelBubble=true;
return false;
}
// if you get to this point, e is the element node clicked
// a second ago-
// put your function body here, using e for the element clicked
alert(e.nodeName+' id='+ e.getAttribute('id')+'\nwas clicked a second ago');
}
document.onclick= twotimer;
Вам нужно позвонить window.setTimeout()
.
Кроме того, window.setTimeout()
использует ссылку на функцию, поэтому нет необходимости в кавычках вокруг check
. Добавление кавычек делает eval()
в строке в кавычках, что является медленным и ненужным.
Это должно работать
document.onclick = function(e) {
function check() {
return function() {
//do something
}
}
window.setTimeout(check, 1000);
}
document.onclick = function() {
setTimeout("check()",1000);
};
function check() {
alert("I'm baaaaaack!");
}
Это должно сработать ...
Вы можете сделать универсальную функцию, которая сделает обработчик отложенного события. Например.
// Delay execution of event handler function "f" by "time" ms.
function makeDelayedHandler( f, time)
{
return function( e )
{
var ev = e || window.event;
setTimeout( function()
{
f( ev );
}, time );
};
}
function check( e )
{
// Your original handler
}
document.onclick = makeDelayedHandler( check, 1000 );
Что-то типа:
document.onclick = function () {
setTimeout(check, 1000);
};
setTimeout
метод не возвращает функцию, он возвращает число , который является идентификатором таймера, который можно использовать в случае, если вы хотите отменить таймер до его запуска (сclearTimeout
)- Вам не нужно использовать строки в качестве первого аргумента, используйте ссылку на функцию.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.