Frage

Ich habe eine Menge von Artikeln zu diesem Thema gesehen, aber keinen Umgang mit jQuery, so hier gehe ich ... Ich bin eine Version eines Skripts von http://javascript-array.com/scripts/jquery_simple_drop_down_menu/ in eine bestehende Anwendung; aber ich kann es nicht an der Arbeit ohne Benachrichtigung Hinzufügen ( ‚msg ...‘) als das erste Verfahren in der $ (document) .ready () -Aufruf.

Das ist nicht alles zu haben scheint mit der Ladezeit zu tun ... egal wie lange ich warte, funktioniert das Menü nicht. setTimeout () funktioniert auch nicht. In alert (), aber, und es wirkt wie ein Zauber. Ich kann auch die Bindungen über Firebug richtig auszuführen.

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;
War es hilfreich?

Lösung

Anstelle der Verwendung von .bind() , verwendet .live() so dass alle zukünftigen Instanzen der Elemente der Pflege getroffen werden. Dies sollte das Ajax-Problem lösen.

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

Andere Tipps

Versuchen Sie Semikolons hier hinzufügen:

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

Entschlossen: Der Standort dieses auf platziert wird, wird von Ajax weitgehend angetrieben; so wurde das DOM als ‚bereit‘ zu sehen ist, obwohl Skripte noch in der Hintergrundverarbeitung wurde (das heißt, während die Menüs noch geladen wurden).

Platzieren der Initialisierungsfunktion kurz nach dem Menü loader diese Arbeit gemacht.

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

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

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

function loadMenus() {
  // load menu script...
  menuInit();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top