我使用以下代码在 div 元素内动态添加一个选择框:
$('#worker').html('<g:select class = "dropdown" name="worker" from="${workers}" optionKey="id" optionValue="name" />');
这段代码的问题在于,当g:select
标签展开时,会生成如下代码:
$('#worker').html('<select onchange="handleWorkerChange(this)" class="dropdown" name="worker" id="worker" >
<option value="2" >Worker1</option>
<option value="4" >Worker1</option>
<option value="18" >Worker1</option>
<option value="19" >Worker1</option>
</select>');
正如您在上面看到的,展开时,选项标签位于换行中,因此这将导致 JavaScript 中的语法错误。有没有办法让 select gsp
标签扩展为单行字符串,以便选择框可以动态嵌入到 div 中?
最佳答案
g:select
也可用作 method within the GSP :
${select(from:aList,value:aValue)}
利用这一点以及我们只是处理文本 (org.codehaus.groovy.grails.web.util.StreamCharBuffer
) 的事实,我们可以删除新行字符:
$('#worker').html('${ select(
class: 'dropdown',
from: workers,
optionKey='id',
optionValue: 'name',
name: 'worker'
).replace(System.getProperty("line.separator"), '') }');
这应该导致整个选择被放置在一行上。
<小时/>最初,我不确定自己到底是什么导致 select
被放置在多行中,所以我直接找到了源代码:FormTagLib .
来自 FormTagLib 的片段:
writer << "<select "
// process remaining attributes
outputAttributes(attrs, writer, true)
writer << '>'
writer.println()
如您所见,这只是一个简单的 println
方法调用:
Terminates the current line by writing the line separator string. The line separator string is defined by the system property line.separator, and is not necessarily a single newline character ('\n').
这就是为什么使用 System.getProperty("line.separator")
很重要。
关于javascript - 如何让GSP标签生成一行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41255627/