2012-04-11 14 views
12

escribí una clase de JavaScript llamada "MyClass" en el que he definido un método de "closeThis"JavaScript - onclick caso recibiendo llamadas de forma automática

MyClass = function(){ 

this.closeThis = function(){ 
     document.getElementById("hidePane").style.display = 'none'; 
} 

} 

Ahora, en mi html, estoy tratando de llamar a ese de la siguiente manera ...

<script type="text/javascript"> 
    function callThis(){ 
     var myclassObj = new MyClass(); 
     document.getElementById("closeButton").onclick = myclassObj.closeThis(); 
    } 
</script> 

Llamada anteriorEsto se ejecutará cuando haga clic en un botón. El problema aquí es que el evento "onclick" en la parte superior de "clsoeButtion" se llama automáticamente cuando se carga la página. ¿Qué podría estar mal en esto?

+2

Elimine la paranthesis después de ... onclick = myclassObj.closeThis(). –

Respuesta

15

Llamas a la función de inmediato.

Al salir de los paréntesis en la referencia de funciones, lo que básicamente está diciendo es:

evaluar la función closeThis y asigna el resultado a onclick

cuando lo que realmente quieren hacer es asignar la referencia de función al controlador de clic:

document.getElementById("closeButton").onclick = myclassObj.closeThis; 

dejar de lado los paréntesis en su lugar, y se le unen el clo esta función para el clic. Lo que esto dice en su lugar es:

Asigne la función closeThis al controlador de clic.

En esencia, asigna la función a la variable como un objeto de primera clase, o una referencia a una función.

Como nota aparte, mi preferencia personal es usar siempre un contenedor de función anónimo. A veces es necesario ser capaz de pasar parámetros en su función, y esto se asegura de que usted puede hacer más fácilmente, así:

document.getElementById("closeButton").onclick = 
    function() { 
     myclassObj.closeThis(); 
    }; 
+2

Gracias @ jmort253 Funcionó como el encanto ... El primer enfoque que sugirió es como asignar el resultado al evento onclick que es extraño. El segundo enfoque es genial. Como dijiste, ahora puedo pasar los parámetros. Muchas gracias :-) – Sriram

2

Es necesario eliminar () de ella de lo contrario, se llama inmediatamente porque así es como se llama a una función sufijando (), por lo que basta con quitar estos aparatos:

document.getElementById("closeButton").onclick = myclassObj.closeThis; 
5

debe ser document.getElementById("closeButton").onclick = myclassObj.closeThis; no myclassObj.closeThis();

myclassObj.closeThis() llamará a la función y luego asignará valor a onclick

Cuestiones relacionadas