我的问题是,CL-WHO在将Lisp表达式转换为html输出时,以单价市场开始每个表达式。这在大多数情况下都是可以的,但这是一个问题,因为我将我的文件链接到外部javascript文件。我试图使这个项目变得简单,而且由于我的团队中没有一个javascript开发人员知道Common,所以使用parenscript很可能超出了方程式。下面是我的问题和我的程序中的一个错误:
:onclick "alertUser('id')"当在html文档中按下特定元素时,这应该会触发名为JavaScript的alertUser函数,并且标记的id应该作为参数传递给JavaScript函数。但是无论我做什么,CL-WHO都会将该字符串转换为单引号,因此我最终得到了一个无效的表达式。下面是代码转换成的内容:
onclick='alertUser('id')'>所有内容都是单引号,因此'alertUser(‘)作为第一个字符串传递,这显然是无效的,并且我在开发人员工具中收到了一个语法区域。我认为我可以通过使用带转义字符的格式函数来解决这个问题。这相当于:
CL-USER> (format t "\"alertUser('id')\"")
"alertUser('id')"
NIL
CL-USER> 但当我试着用CL-WHO:
:onclick (format nil "\"alertUser('id')\"")这意味着:
onclick='"alertUser('locos-tacos-order')"'>也是无效的html。正如你所看到的,无论什么情况,CL-WHO都将以一个单引号开始。接下来,我尝试了CL-WHO fmt功能:
:onclick (fmt "\"alertUser('locos-tacos-order')\"")当我使用fmt函数时,当它被转换成html时,它会完全摆脱my :onclick表达式!:
id='id'"alertUser('id')">最后,我尝试了str函数,得到了与我最初的尝试类似的无效输出:
onclick='"alertUser('id')"'显然,如果我用纯html编写这个代码,它将看起来如下所示:
onclick="alertUser('id')">这是有效的。我的问题只是如何使CL-谁在这些情况下使用双引号而不是单引号?
发布于 2019-04-24 07:26:25
@jkiiski在我问题下面的评论中得到了正确的答案,但我想贴出答案,以便将来任何有类似问题的人都能解决这个问题。正如@jkiiski所言,在cl- there包中有一个名为ATTRIBUTE--CHAR的变量,默认为#\‘。您可以简单地将该变量设置为#\“,以便默认引号为双引号:
(setf *attribute-quote-char* #\")在将该代码行添加到文件顶部附近后,html默认为:
onclick="alertUser('id')"现在,javascript可以正确执行。给@jkiiski一个正确的答案。
https://stackoverflow.com/questions/55821970
复制相似问题