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

目前,我是这样做的:

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

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

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

我该如何解决这个问题?


当前回答

没有转义双引号是OP问题的原因。一种易读的方法是使用反引号(MDN)来转义双引号。下面是一个示例解决方案:

my_btn。setAttribute(’onclick’±my_func ($ $ onclick_var1}”、“onclick_var2} ")”);

其他回答

看起来像是从字符串构建DOM元素。你只需要在result.name周围添加一些引号:

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

不过,您确实应该使用适当的DOM方法来实现这一点。

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

​document.body.appendChild(inputElement);​

请注意,如果这是一个循环或其他东西,结果将在事件触发之前发生变化,您需要创建一个额外的作用域气泡来掩盖变化的变量。

如果你的按钮是动态生成的:

你可以将字符串参数传递给JavaScript函数,如下所示:

我传递了三个参数,第三个是字符串参数。

var btn ="<input type='button' onclick='RoomIsReadyFunc("+ID+","+RefId+",\""+YourString+"\");'  value='Room is Ready' />";

// Your JavaScript function

function RoomIsReadyFunc(ID, RefId, YourString)
{
  alert(ID);
  alert(RefId);
  alert(YourString);
}

我建议甚至不要使用HTML的onclick处理程序,而使用一些更常见的东西,如document.getElementById。

HTML:

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

JavaScript:

document.getElementById("nodeGoto").addEventListener("click", function() {
    gotoNode(result.name);
}, false);

如果您正在动态添加按钮或链接,并面临这个问题,那么这可能会有所帮助。我是这样解决的:

var link= $(contentData1[i]).find("td:first font b a").attr("href",'javascript:onClick=openWin(\'' + tdText + '\')');

我是新的HTML, jQuery和JavaScript。也许我的代码没有优化,语法也没有优化,但它对我有用。

在Razor中,你可以动态地传递参数:

<a href='javascript:void(0);' onclick='showtotextbox(@Model.UnitNameVMs[i].UnitNameID, "@Model.UnitNameVMs[i].FarName","@Model.UnitNameVMs[i].EngName","@Model.UnitNameVMs[i].Symbol" );'>@Model.UnitNameVMs[i].UnitNameID</a>