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