document.onclick settimeout функция javascript help - PullRequest
2 голосов
/ 15 июня 2010

У меня есть функция 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

Редактировать:

Все решения были хорошими, моя проблема была в том, что я использовал функцию проверки, чтобы получить идентификатор элемента, по которому щелкали.Но после задержки нет «памяти» о том, на что нажимали, поэтому остальная часть функции не выполняется.Джимр написал краткий код для сохранения события клика.

Код, который работает (не работает в 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);  
.
.
.

Спасибо всем.

обновление: решение kennebecработает на IE6.

Ответы [ 5 ]

4 голосов
/ 15 июня 2010

Что-то вроде:

document.onclick = function () {
  setTimeout(check, 1000);
};
  • Метод setTimeout не возвращает функцию, он возвращает число, то есть идентификатор таймера, который вы можете использоватьЕсли вы хотите отменить таймер до его запуска (с clearTimeout)
  • Вам не нужно использовать строки в качестве первого аргумента, используйте ссылку на функцию.
2 голосов
/ 16 июня 2010

Вы можете сделать универсальную функцию, которая будет делать обработчик отложенного события.Например,

// 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 );
1 голос
/ 16 июня 2010
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;
0 голосов
/ 15 июня 2010

Вам нужно позвонить window.setTimeout().

Также, window.setTimeout() принимает ссылку на функцию, поэтому нет необходимости в кавычках вокруг check.Добавление кавычек делает eval() в строке в кавычках, что является медленным и ненужным.

Это должно работать

document.onclick = function(e) {
    function check() {
        return function() {
            //do something
        }
    }
    window.setTimeout(check, 1000);
}
0 голосов
/ 15 июня 2010
document.onclick = function() {
    setTimeout("check()",1000);
};

function check() {
    alert("I'm baaaaaack!");
}

Это должно работать ...

...