Frage

In einer jquery Hover Veranstaltung, die ich den folgenden Code verwenden, um ein Menü Drop-Down:

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();
    });
}

ich die folgende Fehlermeldung erhalten:

Seite Fehlerdetails

User-Agent: Mozilla / 4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident / 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) Zeitstempel: Sa, 14. November 2009 11.12.46 UTC

Nachricht: 'undefined' ist Null oder kein Objekt

Zeile: 81

Char: 25

Code: 0

URI: [die URL war hier]

Ich vermute, dass es durch die setTimeout verursacht wird - ich vorbei bin in einem dritten Parameter als Argument für die anonyme Funktion. Die anonyme Funktion ruft eine Funktion mit einem Verschluss.

Kann mir jemand helfen?

War es hilfreich?

Lösung 2

OK, fand ich das Problem. SetTimeout in IE tut die zusätzlichen Parameter unterstützen:

https://developer.mozilla.org/en/window.setTimeout

Mission abgebrochen.

Andere Tipps

$(this).children('a').addClass('current');   
var that = this;     
dTimeout = setTimeout(function($item){slidelower($item)}, 200, that); // This is the bad line

SetTimeout vom window Objekt gehört, daher bezieht sich this auf window. Speichern der Verweis auf den äußeren Rahmen durch Caching es mit einem ‚das‘ Variable.

Für den Fall, jemand anderes liest diese: Obwohl es nicht möglich ist Argumente in setInterval oder SetTimeout in IE in dem Verfahren der OP umrissenen passieren. Man kann dies tun, indem Sie und anonyme Funktion und vorbei in den Argumenten, die in ihrem Umfang sind.

Also das OP müßte die schlechte Leitung ersetzen:

dTimeout = setTimeout(function(){slidelower($item)}, 200);

Das ist die erwartete Syntax für SetTimeout in IE (2 Argumente: Funktion und Verzögerung), aber die anonyme Funktion wird den Wert von $ Artikeln auf „slidelower“ pass

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top