在连接字符串中包含括号引发 "Unterminated String Constant"

Including Parentheses in a Concatenate String Throws "Unterminated String Constant"

我正在编写 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 中会打印出所需的结果。有人可以帮助解释什么是错的吗?我想知道为什么错了,正确的方法是什么,为什么。 一切都有其匹配的引号或括号以及我可以在 Google 上找到的内容,嵌套括号在这样的字符串中很好。所以我真的不明白为什么会报错。当我 运行 脚本时,它仍然输出 html 但抛出脚本错误。

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

将您的线路更改为

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

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

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

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

或者如果您想使用 Chr

添加双引号

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