Saltar al contenido

Pasar un parámetro de cadena en una función onclick

Solución:

Parece que está creando elementos DOM a partir de cadenas. Solo necesita agregar algunas comillas alrededor de result.name:

'<input type="button" onClick="gotoNode('' + result.name + '')" />'

Sin embargo, debería estar haciendo esto con los métodos DOM adecuados.

var inputElement = document.createElement('input');
inputElement.type = "button"
inputElement.addEventListener('click', function(){
    gotoNode(result.name);
});

​document.body.appendChild(inputElement);​

Tenga en cuenta que si se trata de un bucle o algo así, result cambiará antes de que se active el evento y deberá crear una burbuja de alcance adicional para sombrear la variable cambiante.

Un par de preocupaciones para mí con respecto al uso de escape de cadenas en onClick y, a medida que aumente el número de argumentos, será engorroso de mantener.

El siguiente enfoque tendrá un salto – Al hacer clic – lleve el control a un método de controlador y el método de controlador, basado en el objeto de evento, puede deducir el evento de clic y el objeto correspondiente.

También proporciona una forma más limpia de agregar más argumentos y tener más flexibilidad.

<button type="button"
        className="btn btn-default"
        onClick="invoke"
        name="gotoNode"
        data-arg1='1234'>GotoNode</button>

En la capa de JavaScript:

  invoke = (event) => {
    let nameOfFunction = this[event.target.name];
    let arg1 = event.target.getAttribute('data-arg1');
    // We can add more arguments as needed...
    window[nameOfFunction](arg1)
    // Hope the function is in the window.
    // Else the respective object need to be used
    })
  }

La ventaja aquí es que podemos tener tantos argumentos (en el ejemplo anterior, data-arg1, data-arg2, etc.) como sea necesario.

Sugiero ni siquiera usar HTML onclick manipuladores, y use algo más común como document.getElementById.

HTML:

<input type="button" id="nodeGoto" />

JavaScript:

document.getElementById("nodeGoto").addEventListener("click", function() {
    gotoNode(result.name);
}, false);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *