Доступ к объекту события в обработчике события

Когда я пытаюсь присоединить функции обработчика событий с параметрами, такими как:

myhandle.onclick = myfunction(param1,param2);

function myfunction(param1,param2){
}

Теперь я хочу получить доступ к объекту события в моей функции-обработчике. В сети упоминается подход отправки объекта события, например:

myhandle.onclick = myfunction(event,param1,param2);

Но когда я тестирую его, объект события выдачи не определен.

Я знаю, библиотеки делают это легко, но я ищу нативную опцию JS.

13.10.2009 03:30:13
3 ОТВЕТА
РЕШЕНИЕ

Я не совсем уверен, что вы пытаетесь сделать, но, возможно, что-то вроде этого - то, что вы ищете?

function myfunction(param1, param2){
    return function(event) {
        // For compatibility with IE.
        if (!event) {
            event = window.event;
        }

        alert("event = " + event + ", param1 = " + param1 + ", param2 = " + param2);
    };
}

myhandle.onclick = myfunction(param1, param2);

Конечным результатом этого является то, что анонимная функция внутри myfunctionбудет вызываться как onclickобработчик, что приведет к событию плюс два параметра для печати. Эти два параметра фиксируются в момент добавления обработчика события, в то время как они eventбудут меняться при каждом нажатии пользователем myhandle.

4
13.10.2009 03:43:47

Попробуй это:

if (!event) { event = window.event; }

внутри моей функции ().

0
13.10.2009 03:34:34

myhandle.onclick = myfunction (param1, param2);

Это распространенная ошибка новичка на уровне JavaScript, а не то, что библиотеки действительно могут исправить для вас.

Вы не назначаете myfunctionобработчик щелчка, вы вызываете myfunction с параметрами param1 и param2 и присваиваете возвращаемое значение функции onclick. myfunctionне возвращает ничего, так что вы бы назначение undefinedна onclick, что не будет иметь никакого эффекта ..

Что вы имеете в виду, чтобы назначить ссылку на myfunctionсебя:

myhandle.onclick= myfunction;

Чтобы передать функции некоторые дополнительные аргументы, вы должны сделать замыкание, содержащее их значения, что обычно делается с помощью анонимной встроенной функции. Он также может позаботиться о передаче события, если вам нужно (хотя в любом случае вам нужен план резервного копирования для IE, где объект события не передается в качестве аргумента):

myhandle.onclick= function(event) {
    myfunction(param1, param2, event);
};

В пятом выпуске ECMAScript, который станет будущей версией JavaScript, вы можете написать это еще проще:

myhandle.onclick= myfunction.bind(window, param1, param2);

( windowбудучи фиктивным значением, для thisкоторого вам не нужно в этом случае.)

Однако, поскольку многие из современных браузеров не поддерживают пятое издание, если вы хотите использовать этот метод, вы должны предоставить реализацию для старых браузеров. Некоторые библиотеки уже включают одну; Вот еще один автономный.

if (!('bind' in Function.prototype)) {
    Function.prototype.bind= function(owner) {
        var that= this;
        var args= Array.prototype.slice.call(arguments, 1);
        return function() {
            return that.apply(owner,
                args.length===0? arguments : arguments.length===0? args :
                args.concat(Array.prototype.slice.call(arguments, 0))
            );
        };
    };
}
7
22.11.2009 03:57:39