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);