No se puede agregar acción al botón creado dinámicamente en JavaScript

Creé un botón dinámicamente en JavaScript y no puedo establecer una acción para ese botón.

var but = document.createElement("input");
but.type = "button"
but.value = "NewButton";
but.onClick = check();
var newElement = document.getElementById("addButton"); //span element id
newElement.appendChild(but);

La función 'verificar ()' no se llama cuando se hace clic en el botón

preguntado el 12 de junio de 12 a las 11:06

lo que se devuelve por check()? Si desea que se invoque la verificación al hacer clic en un botón, elimine el paréntesis: but.onClick = check; -

4 Respuestas

Tienes 2 problemas con tu código. La primera es que el evento no está en mayúsculas, la segunda es que desea asignar el evento a la función en lugar de los resultados de la función. Debería verse como:

but.onclick = check;

Esto realmente asignará el evento a la dirección de la función en lugar del resultado esperado de la función (que no haría nada).

Respondido el 12 de junio de 12 a las 11:06

check() ejecuta la función y asignará lo que esa función devuelva a but.onClick. Para asignar la función a un evento, especifíquelo por nombre (sin los paréntesis).

Respondido el 12 de junio de 12 a las 11:06

creo que tuyo check la función no devuelve la función que se necesita para asignar como devolución de llamada para el evento onclick, luego

but.onclick = check; 

por ejemplo en caso:

var check = function() {   
     return function(){
        /* some logic eg. dependent of arguments 'parent' function' */  
    }  }
//works
but.onclick = check('somethingImportant');

De acuerdo, pero hay un problema si desea asignar varias devoluciones de llamada para este evento :) Sería mejor si supiera sobre addEventListener / attachEvent

but.addEventListener( 'click', check,true );
but.addEventListener( 'click', check2,true );

Luego, si es necesario, use removeEventLister or detachEvent para separar función(es);

Sin embargo, intenta jugar con jquery :)

var check = function(){/* do something */};
        $('#addButton').append(
           $('<input type="button" value="New Button"/>') 
        ).click( check );​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

or

    $('#addButton').append( 
           $('<input/>' ).attr( 'type', 'button' ).val( 'New Button' ) )
                .click( function(){ /* do something */ } ) ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
    );

luego

$('#addButton').unbind(  'click' ) // unbind( 'click',check )  

Y muchas más posibilidades de hacer eso :)

Respondido el 12 de junio de 12 a las 12:06

Gracias Abuduba por todas tus respuestas. user25

Pequeña caja onclick:

but.onclick = check();

Respondido el 12 de junio de 12 a las 14:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.