передать событие и переменную функции anon в Firefox - PullRequest
2 голосов
/ 15 июля 2011

Я снова прихожу со своими неспособностями понять javascript.

У меня есть перетаскиваемая библиотека, и у нее есть команда, которая называется так (_ag - это просто пространство имен):

_ag.drag(event,targetDiv);  
// targetDiv can be a string, btw - converted to an element in the function

, поэтому у меня есть код, который выглядит так (передача некоторых данных с закрытием - новый трюк для меня):

header.onmousedown=function(targetDiv){
    return function(){
        _ag.drag(event,targetDiv)
    }

}(aTargetDiv)

отлично работает!просто здорово!в ... IE!SF!Хром!НЕ В FIREFOX!

Нет, firefox не может найти событие.Теперь обычно это достаточно просто с чем-то вроде этого (формируется немного по-другому - надеюсь, что он все еще действителен):

header.onmousedown=function(event){
    alert(event.screenX)
}

Однако, если я решу передать некоторые параметры, это сметает событие, которое, я думаю, является некоторымневидимый параметр в FF?

//broken thing 1:
header.onmousedown=function(event){
    alert(event.screenX)    //  somethingToPass in covers event in FF
}(somethingToPassIn)


// broken thing 2:
header.onmousedown=function(event){
    alert(event.screenX)    
}(event,somethingToPassIn)  // event is undefined

SO FIREFOX: Как я могу отправлять вам события?Мы надеемся, что это очень глупый вопрос, и что у НАРОДОВ есть ответы!Заранее спасибо, я сейчас буду биться головой о стену.

1 Ответ

7 голосов
/ 15 июля 2011

Firefox, вероятно, не поддерживает event, но вместо этого передает его в вашу функцию при возникновении события.Итак,

header.onmousedown=function(targetDiv){
    return function(e){
        e = e || event;  //This will give support for global event and passing the event into the function
        _ag.drag(e, targetDiv);
    }
}(aTargetDiv)

Вам не нужно замыкание, если только переменная aTargetDiv не изменится позже в коде.Вместо этого вы можете сделать:

header.onmousedown=function(e){
    e = e || event;
    _ag.drag(e, aTargetDiv);
};
...