2016-09-21 2 views
0

Ich habe die folgende Funktion, dieFireFox Javascript Event-Handling

for(var i = 0; i < 5; ++i) { 
     document.all["elems" + i].onscroll = getFunc("onScrollAdj(document.all['tb" + i + "']);"); 
    } 

function getFunc(jsString) { 
    return new Function(jsString); 
} 

in Chrome/IE funktioniert aber ich ReferenceError: event is undefined bekommen.

Ich habe versucht, die Funktion um ein Ereignis zu schreiben, aber ich bekomme dann einen anderen Fehler var i is undefined.

Gibt es eine Möglichkeit sicherzustellen, dass sowohl Ereignis und Attribute übergeben werden können?

+0

was 'onScrollAdj' - Ich wette, das bezieht sich auf "Event" - das war ein Internet Explorer "Kludi", den Chrome aus irgendeinem Grund beschlossen hat zu implementieren –

Antwort

2

however I get 'ReferenceError: event' is undefined.

Das ist, weil Sie versuchen, event zu verwenden, ohne es als Argument zu erklären. Das funktioniert nur mit Microsoft-Browsern, die event ein globales machen, und Chrome, das einen Bone zu Microsoft-only-Code wirft. Sie müssen das Argument deklarieren.

Es gibt keine Notwendigkeit für new Function praktisch immer und schon gar nicht in diesem Fall:

for(var i = 0; i < 5; ++i) { 
    document.all["elems" + i].onscroll = getFunc(i); 
    // ------------------------------------------^ 
} 

function getFunc(i) { 
// --------------^ 
    return function(event) { onScrollAdj(event, document.all['tb' + i]); }; 
    // -------------^--------------------^ 
} 

Beachten Sie, dass Sie sicherstellen müssen, werden feststellen, dass onScrollAdj akzeptiert event:

function onScrollAdj(event, tbThingy) { 
// ------------------^