传递带连字符的字符串将被计算为整数(减法!)js

时间:2011-06-02 19:15:52

标签: javascript string integer

我试图通过onClick ...

将类似“108-17-014”的值传递给函数
hyphenatedId = "107-17-14"
dialogBody += " <a href='javascript:void(0);' onClick='class.exampleFunction("+ hyphenatedId +");'>link title</a>"; 

在class.exampleFunction中,

exampleFunction : function ( hyphenatedId ) {
    console.log(hyphenatedId);
}

但是,当我单击链接时,console.log不显示“107-17-14”,而是显示76 ...因为它将连字符解释为减法运算符。

如何防止这种情况发生?欢迎任何其他建议=)

3 个答案:

答案 0 :(得分:7)

传递为字符串

dialogBody += " <a href='javascript:void(0);' onClick='class.exampleFunction(\""+ hyphenatedId +"\");'>link title</a>"; 

答案 1 :(得分:2)

您正在运行时在onClick中动态创建文本,因此您最终获得的内容如下所示:

<a href='javascript:void(0);' onClick='class.exampleFunction(107-17-14);'>link title</a>

然后,您可以看到为什么首先减去这些值 - 在上面的JavaScript中没有任何内容表明它实际上是一个字符串。您需要做的就是将参数包装在引号中:

dialogBody += " <a href='javascript:void(0);' onClick='class.exampleFunction(\""+ hyphenatedId +"\");'>link title</a>"; 

请注意,您必须转义引号,否则会将其视为字符串构造的终止点。

答案 2 :(得分:2)

如上一张海报所述,如果id =“3-2-1”则:

'f('+id+')'

评估字符串:

'f(3-2-1)'

然后评估为:

f(0)

当你想要的是:

'f("3-2-1")'

应该以:

开头
'f("'+id+'")'

评估为:

f("3-2-1")