myhandle.onclick = myfunction (param1, param2);
Este es un error de principiante común a nivel de JavaScript, y no es algo que las bibliotecas realmente puedan arreglar para usted.
No está asignando myfunction
como un controlador de clic, que son llamandomyfunction
, con param1 y param2 como argumentos, y asignar el valor de retorno de la función a onclick
. myfunction
no devuelve nada, por lo que estaría asignando undefined
a onclick
, que no tendría ningún efecto ..
Lo que quiere decir es asignar una referencia a sí mismo myfunction
:
myhandle.onclick= myfunction;
Para superar la función algunos argumentos adicionales que tiene que hacer un cierre que contiene sus valores, que normalmente se realiza con una función en línea anónima. Puede hacerse cargo de transmitir el evento en demasiado si es necesario (aunque en cualquier caso se necesita un plan de copia de seguridad para IE en el que el objeto de evento no se pasa como argumento):
myhandle.onclick= function(event) {
myfunction(param1, param2, event);
};
En ECMAScript quinta edición, la cual será la futura versión de JavaScript, puede escribir esto aún más fácil: (. window
con ser un valor ficticio para this
que no se necesita en este caso)
myhandle.onclick= myfunction.bind(window, param1, param2);
sin embargo, desde muchos de los navegadores de hoy no Para admitir la Quinta Edición, si desea utilizar este método, debe proporcionar una implementación para navegadores más antiguos.Algunas bibliotecas ya incluyen una; aquí hay otro independiente.
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))
);
};
};
}
muchas gracias! esto explica maravillosamente. – Rajat