2009-09-25 5 views
1

Je souhaite exécuter un nombre particulier d'instructions après un certain délai. Pour exemple:Comment retarder l'appel d'une fonction en javascript?

function findPosX(obj) { 
    var curleft = 0; 
    if (obj.offsetParent) { 
     while (1) { 
      curleft += obj.offsetLeft; 
      if (!obj.offsetParent) { 
       break; 
      } 
      obj = obj.offsetParent; 
     } 
    } else if (obj.x) { 
     curleft += obj.x; 
    } 
    return curleft; 
} 

function findPosY(obj) { 
    var curtop = 0; 
    if (obj.offsetParent) { 
     while (1) { 
      curtop += obj.offsetTop; 
      if (!obj.offsetParent) { 
       break; 
      } 
      obj = obj.offsetParent; 
     } 
    } else if (obj.y) { 
     curtop += obj.y; 
    } 
    return curtop; 
} 
function gotoDiv(index) { 
    var ele = document.getElementById("Div" + index); 
    var x = findPosX(ele); 
    var y = findPosY(ele); 
    setTimeout("window.scrollTo(x, y)", 5000); 
} 

Ici, je veux régler la position de défilement actuelle à un prticular div. Mais il me donne l'erreur: x est indéfini. Laissez-moi vous dire si j'utilise les fonctions ci-dessous cela fonctionne très bien, alors s'il vous plaît ne me dites pas que ele est nul et bla bla bla.

function gotoDiv(index) { 
    var ele = document.getElementById("Div" + index); 
    var x = findPosX(ele); 
    var y = findPosY(ele); 
    window.scrollTo(x, y); 
} 

Toute aide appréciée.

+0

ele étant nul ne sera probablement pas causer x étant non définie, je pense que natrium a cette solution, mais vous devriez vérifier ele pour null cependant;) je suis sûr que vous avez simplement simplifié le code ici et vous le faites déjà dans votre code;) – dharga

Répondre

4

essayer

setTimeout("window.scrollTo(" + x + ", " + y + ")", 5000); 

ce n'est pas la meilleure pratique. Utilisez cette place:

setTimeout(function() { window.scrollTo(x, y); }, 5000); 
+5

Ne pas passer le code JS comme chaîne à la fonction setTimeout. S'il vous plaît passer une fonction javascript régulière. – SolutionYogi

+0

A travaillé comme un charme ... Merci mon pote !! – Manish

+1

Façon de déchirer la réponse de Bdukes après le fait. –

1

Wrap la fonction dans une fermeture, puis mettre le délai d'attente à l'intérieur de la fermeture.

+0

déjà essayé cela mais que faire si la fonction nécessite un paramètre ?? C'est donner l'erreur actuelle bcoz de la même raison .. !! – Manish

14

Vous pouvez donner setTimeout une fonction, plutôt qu'une chaîne, ce qui vous permettra d'accéder à ces variables:

setTimeout(function() { window.scrollTo(x, y); }, 5000);  
+0

Super ... ça marche aussi ... !!! Merci ... – Manish

Questions connexes