我想传递一个参数(即字符串)到Onclick函数。

目前,我是这样做的:

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

例如,result.name = string "Add"。

当我点击这个按钮时,我有一个错误,说“Add is not defined”。由于这个函数调用可以很好地处理数值形参,所以我假设它与字符串中的符号“”有关。

我该如何解决这个问题?


当前回答

我猜,您正在使用JavaScript本身创建一个按钮。代码中的错误在于,它会以这种形式呈现

<input type="button" onClick="gotoNode(add)" />'

在当前状态下,add将被视为与变量或函数调用类似的标识符。你应该这样转义这个值

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

其他回答

我猜,您正在使用JavaScript本身创建一个按钮。代码中的错误在于,它会以这种形式呈现

<input type="button" onClick="gotoNode(add)" />'

在当前状态下,add将被视为与变量或函数调用类似的标识符。你应该这样转义这个值

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

试试这个…

HTML:

<button id="a1" type="button" onclick="return a1_onclick('a1')">a1</button>

JavaScript:

<script language="javascript" type="text/javascript">
    function a1_onclick(id) {
        document.getElementById(id).style.backgroundColor = "#F00";
    }
</script>

注意:在HTML代码中,请确保在('a1')等符号之间发送参数

如果你需要传递一个带有'this'关键字的变量,下面的代码可以工作:

var status = 'Active';
var anchorHTML = '<a href ="#" onClick = "DisplayActiveStatus(this,\'' + status + '\')">' + data+ '</a>';

如果用于生成一组具有不同处理程序参数的按钮。

JavaScript闭包

let some_button = document.createElement( "button" );
some_button.type = "button";

some_button.onclick = doWithParam( some_param );

function doWithParam( param ){
    return function(){
        alert( param ); // <-- Your code here
    }
}

如果我们这样做:

some_button.onclick = foo( some_param );
function foo( param ){
    alert( param );
}

然后函数foo在每个更新页面之后启动。

如果我们这样做:

for( let i = 0; i < 10; ++i ){
    var inputElement = document.createElement('input');
    inputElement.type = "button"
    inputElement.addEventListener('click', function(){
        gotoNode(result.name);
    });

 ​   document.body.appendChild(inputElement);​
}

然后,对于循环中创建的所有按钮,参数的最后一个值是“result.name”。

您可以传递一个引用或字符串值。只需将函数放在双逗号“”中,如下所示: