2010-03-18 5 views
0

J'ai vu beaucoup d'articles à ce sujet, mais aucun traitant de jQuery, alors je vais ... J'implémente une version d'un script de http://javascript-array.com/scripts/jquery_simple_drop_down_menu/ dans une application existante; Cependant, je ne peux pas le faire fonctionner sans ajouter d'alerte ('msg ...') comme première méthode dans l'appel $ (document) .ready().Application jQuery ne fonctionnera pas sans alerte()

Cela ne semble pas avoir à voir avec le temps de chargement ... peu importe combien de temps j'attends, le menu ne fonctionne pas. setTimeout() ne fonctionne pas non plus. Ajoutez alerte(), cependant, et cela fonctionne comme un charme. Je peux également exécuter correctement les liaisons via Firebug.

var timeout = 500; 
var closetimer = 0; 
var ddmenuitem = 0; 

function jsddm_open() 
{ jsddm_canceltimer(); 
    jsddm_close(); 
    ddmenuitem = $(this).find('ul').css('visibility', 'visible');} 

function jsddm_close() 
{ if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');} 

function jsddm_timer() 
{ closetimer = window.setTimeout(jsddm_close, timeout);} 

function jsddm_canceltimer() 
{ if(closetimer) 
    { window.clearTimeout(closetimer); 
     closetimer = null;}} 

$(document).ready(function() 
{ $('#jsddm > li').bind('mouseover', jsddm_open) 
    $('#jsddm > li').bind('mouseout', jsddm_timer)}); 

document.onclick = jsddm_close; 

Répondre

0

Au lieu d'utiliser .bind(), utilisez .live() afin que tous les cas futurs des éléments sont pris en charge. Cela devrait résoudre le problème ajax.

$(document).ready(function() { 
    $('#jsddm > li').live('mouseover', jsddm_open); 
    $('#jsddm > li').live('mouseout', jsddm_timer); 
}); 
+0

J'ai complètement oublié $ .live(). Cela fonctionne aussi (et est beaucoup plus propre)! –

0

Essayez d'ajouter des points-virgules ici:

$('#jsddm > li').bind('mouseover', jsddm_open); 
$('#jsddm > li').bind('mouseout', jsddm_timer); 
+0

J'ai des points-virgules sur ma version. Ce n'est pas un problème. –

+0

@ webjawns.com - Dans ce que vous avez posté vous n'avez pas ... si vous ne postez pas le code réel, il est difficile d'aider –

+0

Même sans les points-virgules, ce code fonctionne toujours. C'était un problème conceptuel que j'avais besoin de résoudre ... le code n'était là que pour peindre l'image. Je vais bien maintenant. Je l'ai compris. Merci de votre aide. –

0

Résolu: Le site présente est placée est en grande partie tirée par l'Ajax; par conséquent, le DOM était considéré comme «prêt», bien que les scripts soient toujours en cours de traitement en arrière-plan (c'est-à-dire pendant le chargement des menus).

Le fait de placer la fonction d'initialisation juste après que le chargeur de menu ait fait ce travail.

// DOES NOT WORK 
$(document).ready(function() { 
    loadMenus(); 
    menuInit(); 
}); 

function loadMenus() { 
    // load menu script... 
} 

// WORKS 
$(document).ready(function() { 
    loadMenus(); 
}); 

function loadMenus() { 
    // load menu script... 
    menuInit(); 
} 
Questions connexes