Приложение, управляемое jQuery. не будет работать без предупреждения () - PullRequest
0 голосов
/ 18 марта 2010

Я видел много статей на эту тему, но ни одна из них не касается jQuery, так что здесь я ... Я реализую версию скрипта из http://javascript -array.com / scripts / jquery_simple_drop_down_menu / в существующее приложение; однако я не могу заставить его работать без добавления оповещения ('msg ...') в качестве первого метода в вызове $ (document) .ready ().

Кажется, это не имеет никакого отношения ко времени загрузки ... независимо от того, как долго я жду, меню не работает. setTimeout () тоже не работает. Однако добавьте alert (), и он работает как шарм. Я также могу правильно выполнить привязки через 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;

Ответы [ 3 ]

0 голосов
/ 18 марта 2010

Решено: Сайт, на котором размещается сайт, в основном управляется Ajax; таким образом, DOM рассматривался как «готовый», хотя сценарии все еще обрабатывались в фоновом режиме (то есть, пока меню еще загружались).

Размещение функции инициализации сразу после того, как загрузчик меню выполнил эту работу.

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

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

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

function loadMenus() {
  // load menu script...
  menuInit();
}
0 голосов
/ 18 марта 2010

Вместо использования .bind() используйте .live(), чтобы позаботиться обо всех будущих экземплярах элементов. Это должно решить проблему AJAX.

$(document).ready(function() {  
    $('#jsddm > li').live('mouseover', jsddm_open);
    $('#jsddm > li').live('mouseout',  jsddm_timer);
});
0 голосов
/ 18 марта 2010

Попробуйте добавить точку с запятой здесь:

$('#jsddm > li').bind('mouseover', jsddm_open);
$('#jsddm > li').bind('mouseout',  jsddm_timer);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...