好的,我是javascript / grails新手,不确定在这里做什么。
基本上,我有一个被多个参数调用的javascript函数,我想将它们替换为grails可分析的字符串。
我有许多grails下拉菜单,它们调用javascript函数来链接到另一个页面,该页面具有多个需要传递的参数(项目编号和数量)。
这里是选择:
<g:select optionKey="key" optionValue="value" value="${item.getQty()}" name="qty" from="[1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9]"
onchange="goToPage('qty${item.id}',this.value)"></g:select>
javascript函数:
<script type="text/javascript">
function goToPage(itemId, val){
window.location.href="${createLink(controller:'GOrder' ,action:'updateShoppingCart' params:[item: "", qty: ""])}" + itemId + val;
}
因此,它采用itemId和val,将它们连接起来,并用该串联值替换最后一组引号。我想为每个参数替换一组引号。
我真的不明白如何将字符串串联起来实际上替代了一个值。
谢谢!
最佳答案
您在这里混合了服务器端和客户端。的
${createLink(controller:'GOrder' ,action:'updateShoppingCart' params:[item: "", qty: ""])}
是在将GSP渲染为HTML时由服务器端的Grails评估的,因此最终在JavaScript中生成的内容类似于
function goToPage(itemId, val){
window.location.href="/myapp/GOrder/updateShoppingCart?item=&qty=" + itemId + val;
}
相反,您可能想要的是只生成基本URL,直到Grails端的问号,然后在JavaScript的客户端添加查询参数。
function goToPage(itemId, val){
window.location.href=
"${createLink(controller:'GOrder', action:'updateShoppingCart'
).encodeAsJavaScript()}?item=" + encodeURIComponent(itemId)
+ "&qty=" + encodeURIComponent(val);
}
请注意我添加了
encodeAsJavaScript()
的方式-在生成要包含在JavaScript字符串文字中的值时,应始终使用它,它将反斜杠转义需要它的任何内容。同样,您要添加到URL的任何JavaScript字符串都需要使用JavaScript encodeURIComponent
函数进行编码-例如,如果itemId
的值为“item one”,则需要在URL后面附加item%20one
。关于javascript - 从javascript函数更新Groovy字符串中的多个参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13379490/