【问题标题】:Including Parentheses in a Concatenate String Throws "Unterminated String Constant"在连接字符串中包含括号会引发“未终止的字符串常量”
【发布时间】:2019-04-28 14:22:04
【问题描述】:

我正在编写一个 VBScript/HTA 以在 for 循环中列出打印机。

document.write("<BUTTON onclick=SetDefaultPrinter('" & objItem.Name & "')>" & objItem.Name & "</BUTTON><BR>")

循环是创建按钮,文本是打印机的名称,onclick 事件具有应该传递给过程的值。

我希望打印出来的代码是

<BUTTON onclick=SetDefaultPrinter('Ms Print to PDF')>MS Print to PDF</BUTTON>

尝试了不同的方法,例如添加 chr(40) 和 chr(41) 而不是括号,但没有人尝试,我得到一个错误。

要么

Expected: ')'

Unterminated string constant

将完全相同的代码放入 MsgBox 会打印所需的结果。有人可以帮忙解释什么是错的吗?我想知道为什么它是错误的,正确的方法是什么,以及为什么。 一切都有其匹配的引号或括号,我可以在谷歌上找到,嵌套括号在这样的字符串中很好。所以我真的不明白为什么它会出错。当我运行脚本时,它仍然会输出 html,但会引发脚本错误。

注意:我有点期待有人质疑我代码的其他方面。我承认我不是最强大的编码员,并且会欢迎建议。比如给SetPrinterDefault()传一个值;怀疑我这样做的方式是正确的。在我的辩护中,我试图先解决这个问题,然后测试我是否正确地将值传递给它。边走边学..

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    将你的线路改为

    document.write("&lt;BUTTON onclick=""SetDefaultPrinter('" &amp; objItem.Name &amp; "')""&gt;" &amp; objItem.Name &amp; "&lt;/BUTTON&gt;&lt;BR&gt;")

    问题是objItem.Name 返回一个带空格的字符串。所以当onClick事件被触发时,你必须在调用函数时使用单引号或双引号。

    你也可以使用下面的代码来实现同样的效果

    document.write("&lt;BUTTON onclick='SetDefaultPrinter(""" &amp; objItem.Name &amp; """)'&gt;" &amp; objItem.Name &amp; "&lt;/BUTTON&gt;&lt;BR&gt;")

    或者如果你想使用Chr添加双引号

    document.write("&lt;BUTTON onclick='SetDefaultPrinter(" &amp; Chr(34) &amp; objItem.Name &amp; Chr(34) &amp; ")'&gt;" &amp; objItem.Name &amp; "&lt;/BUTTON&gt;&lt;BR&gt;")

    【讨论】:

    • 非常感谢!我现在明白了。
    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2014-04-02
    • 2011-07-24
    • 2018-09-16
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多