我有以下代码:
{{range . }} <td {{ if not .isdisabled }}onclick="return toggle_active($(this))"{{ end }}> [x] </td> {{end}}
这有效,它按应有的方式放置 onclick 事件。
但是,如果我尝试将 onclick
事件动态创建为字符串(无论是在模板中还是作为 go 函数),它都不起作用。
示例:
{{$clickevent := "return toggle_active($(this));"}} <td {{$clickevent}}>[x]</td>
或者:
func (d TemplateObject) Click() string { return "onclick="toggle_active($(this))"" } <td {{.Click}}>[x]</td>
它在 html 中呈现如下:
如果我不把它放在 <tag>
本身 <td>{{$clickevent}}</td>
中,它会将其打印为字符串。
如何才能正确渲染属性?
你需要做
func (d TemplateObject) Click() template.HTMLAttr { return "onclick="toggle_active($(this))"" }
以便它知道该字符串可以安全地用作属性
https://pkg.go.dev/html/template#htmlattr
htmlattr 封装来自可信源的 html 属性,例如 dir="ltr"
。
使用此类型会带来安全风险:封装的内容应来自受信任的来源,因为它将逐字包含在模板输出中。