¿Cómo se cambia el JavaScript que se ejecutará cuando se hace clic en un botón de formulario?

He intentado cambiar sus atributos secundarios onClicked y onclicked así:

$('mybutton').onClick = 'doSomething';

Y

$('mybutton').attributes["onclick"] = 'doSomething()';

Ninguno de los dos parece funcionar. Mis otras opciones son:

  1. Tener dos botones y ocultar uno y mostrar el otro.
  2. Para que se dirija a una función que evalúa una cadena y cambia la cadena a la función que quiero ejecutar.

Ninguna parece muy elegante.

Estoy usando Prototype como una biblioteca js, por lo que tiene herramientas útiles que puedo usar.

2
Omar Kooheji 21 may. 2009 a las 18:28

7 respuestas

La mejor respuesta

Para Prototype, creo que sería algo como esto:

$("mybutton").observe('click', function() {
     // do something here
});

EDITAR: O, como dice en la documentación, simplemente puede especificar la función que desea llamada al hacer clic:

$('mybutton').observe('click', respondToClick);

function respondToClick(event) {
    // do something here
}

Pero esto es todo, nuevamente, específico del prototipo.

2
montrealist 21 may. 2009 a las 14:32

Encontré una solución para su problema con el prototipo en Firefox:

$("#myButtonId").writeAttribute('onclick', ''); // first remove the attribute
$("#myButtonId").observe('click', function () { ... }); // then add the event
0
Alexandre 24 nov. 2011 a las 09:38

La forma general de establecer un controlador onclick en javascript es establecer onclick en una función, pasándole el nombre de una función directamente, no en una cadena. Entonces, si myButton se establece en un Elemento DOM, escribiría:

myButton.onclick = doSomething;

Entonces, cuando hace clic en el botón 'mybutton', la función doSomething se llamará como doSomething(). Para funciones anónimas, puede escribir:

myButton.onclick = function() {
    alert("myButton was clicked!");
};
1
Rudd Zwolinski 21 may. 2009 a las 14:32

En JQuery es

$("#myButtonId").click(myFunction);


function myFunction(){
 alert("Clicked");
}

O si quieres poner la función en línea:

$("#myButtonId").click(function(){
     alert("Clicked");
});

Si está usando JQuery en primer lugar, asegúrese de usar el prefijo de selector correspondiente (IE: si está usando el Id del elemento, coloque un # delante de él). En segundo lugar, es el método de clic para asignar una devolución de llamada al evento de clic.

0
Leather 21 may. 2009 a las 14:36

Usando el marco Prototype puedes hacer:

Event.observe("mybutton", "click", clickHandler);

O:

Event.observe("mybutton", "click", function() {
  alert("Button clicked!");
});

O:

$("mybutton").observe("click", clickHandler);

O:

$("mybutton").observe("click", function() {
  alert("Button clicked!");
});
2
John Topley 21 may. 2009 a las 14:37

Si el evento onclick original se estableció a través de atributos HTML, puede usar lo siguiente para sobrescribirlo:

$("#myButtonId").setAttribute("onclick", "myFunction();");
3
Max Advent 20 sep. 2012 a las 07:30

La última vez que usé Prototype, fue algo como esto:

Event.observe('mybutton', 'click', doSomething);

Por cierto, tus ejemplos podrían incluso haber funcionado si no citaras los nombres de las funciones.

EDITAR: Sí, Element.observe (element, eventName, handler) y someElement.observe (eventName, handler) también funcionan. Y no cite el nombre del controlador: ¡desea pasar la función, no una cadena!

0
pilsetnieks 21 may. 2009 a las 14:37