【问题标题】:Passing a string with hyphens gets evaluated as an integer (subtractions!) js传递带有连字符的字符串被评估为整数(减法!)js
【发布时间】:2011-09-07 08:02:42
【问题描述】:

我正在尝试通过 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 ... 因为它将连字符解释为减法运算符。

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

【问题讨论】:

    标签: javascript string integer


    【解决方案1】:

    作为字符串传递

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

    【讨论】:

      【解决方案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>"; 
      

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

      【讨论】:

        【解决方案3】:

        正如之前的海报所说,如果 id="3-2-1" 那么:

        'f('+id+')'
        

        计算为字符串:

        'f(3-2-1)'
        

        然后计算为:

        f(0)
        

        当你想要的是:

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

        应该是这样开始的:

        'f("'+id+'")'
        

        评估为:

        f("3-2-1")
        

        【讨论】:

        • 非常有见地。我很欣赏这种减少,因为 =D 周围的字符更少,更容易看到
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 2017-04-17
        相关资源
        最近更新 更多