jQueryの&タイムアウトとIEのエラー
-
20-09-2019 - |
質問
私は、ドロップダウンメニューには、次のコードを使用してjQueryのホバーイベントには:
clearTimeout(hTimeout);
$('#lowermenu').queue('fx', []);
$('#menucenter .current').removeClass('current');
$(this).children('a').addClass('current');
dTimeout = setTimeout(function($item){slidelower($item)}, 200, $(this)); // This is the bad line
function slidelower($li)
{
$li.addClass('dropping');
$lowermenu = $li.children('ul').clone();
$('#lowermenu:not(:animated)').empty().append($lowermenu).slideDown();
$('#lowermenu > ul > li:not(:animated)').hover(function()
{
$(this).children('ul:hidden').css('top', 'auto').slideDown();
}, function()
{
$(this).children('ul:visible').slideUp();
});
}
、私は次のエラーを取得する:
Webページエラーの詳細
ユーザーエージェント:Mozillaの/ 4.0(互換; MSIE 8.0; Windows NTの5.1;トライデント/ 4.0; GTB6.3; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0) タイムスタンプ:土、2009年11月14日11時12分46秒UTC
メッセージ: '未定義' がnullであるかどうか、オブジェクト
ライン:81
のChar:25
コード:0
URI:[URLはここにあった]
私はそれがsetTimeoutメソッドによって引き起こさだと思われる - 私は無名関数の引数として三番目のパラメータを渡しています。その無名関数はクロージャと関数を呼び出します。
誰が助けることはできますか?
解決 2
OK、私は問題を発見しました。
:IEでのsetTimeoutは、追加のパラメータをサポートしてdoesntのhttps://developer.mozilla.org/en/window.setTimeoutする
ミッションは中止されます。
他のヒント
$(this).children('a').addClass('current');
var that = this;
dTimeout = setTimeout(function($item){slidelower($item)}, 200, that); // This is the bad line
のsetTimeoutをwindow
オブジェクトによって所有され、従ってthis
はwindow
を指します。 「は」変数でそれをキャッシュすることにより、外側のコンテキストへの参照を保存します。
念のために誰がこれを読み取ります。 OPが概説された方法でIEでのsetIntervalやsetTimeoutメソッドに引数を渡すことが可能ではありません。一つは、使用して匿名関数と範囲内にある引数に渡すことによって行うことができます。
だから、OPはと悪い行を交換する必要があります
dTimeout = setTimeout(function(){slidelower($item)}, 200);
これはIEでのsetTimeoutの予想される構文(2つの引数:機能および遅延)であるが、匿名関数は「slidelower」に$項目の値を渡します。