0

これに関する多くの記事を見てきましたが、jQuery を扱っている記事はありませんでした ; ただし、 $(document).ready() 呼び出し内の最初のメソッドとして alert('msg...') を追加しないと動作しません。

これはロード時間とは何の関係もないようです...どれだけ待ってもメニューが機能しません。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;
4

3 に答える 3

0

解決済み:これが配置されているサイトは、主に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();
}
于 2010-03-18T15:41:36.640 に答える
0

.bind()を使用する代わりに.live()、要素の将来のすべてのインスタンスが処理されるようにを使用します。これにより、ajaxの問題が解決するはずです。

$(document).ready(function() {  
    $('#jsddm > li').live('mouseover', jsddm_open);
    $('#jsddm > li').live('mouseout',  jsddm_timer);
});
于 2010-03-18T15:44:56.087 に答える
0

ここにセミコロンを追加してみてください:

$('#jsddm > li').bind('mouseover', jsddm_open);
$('#jsddm > li').bind('mouseout',  jsddm_timer);
于 2010-03-18T15:17:15.003 に答える