Javascript 使用grails生成html ID的最佳实践

Javascript 使用grails生成html ID的最佳实践,javascript,jquery,html,grails,gsp,Javascript,Jquery,Html,Grails,Gsp,我有一个可以在同一个视图中多次渲染的模板 该模板包含一个表单,我使用html id将一些jquery事件侦听器附加到表单元素 现在,我使用“g:set”在模板顶部创建一个elementId变量,使用当前时间(以毫秒为单位),并将其附加到表单上的每个元素。这样,无论同一模板呈现多少次,每个表单元素在页面中都将具有唯一的id 我的方法可行,但在我看来,必须有更好的方法来实现我想做的事情 以下是我的方法示例: <g:set var="elementId" value="${'elementId-

我有一个可以在同一个视图中多次渲染的模板

该模板包含一个表单,我使用html id将一些jquery事件侦听器附加到表单元素

现在,我使用“g:set”在模板顶部创建一个elementId变量,使用当前时间(以毫秒为单位),并将其附加到表单上的每个元素。这样,无论同一模板呈现多少次,每个表单元素在页面中都将具有唯一的id

我的方法可行,但在我看来,必须有更好的方法来实现我想做的事情

以下是我的方法示例:

<g:set var="elementId" value="${'elementId-' + new Date().getTime()}" />

<form>
<g:textField id="${elementId}name" name="name"/>
<g:textField id="${elementId}address" name="address"/>
</form>

<script>
$("#${elementId}name").on("click", myFunction())
$("#${elementId}address").on("click", myFunction())
</script>

$(“#${elementId}name”)。在(“单击”,myFunction())
$(“#${elementId}地址”)。在(“单击”,myFunction())

尽管这样做可能会感觉有点“奇怪”或“奇怪”,但您的方法将实现您的目标。添加您在GSP级别生成的随机数或UUID也将有助于避免冲突(尽管这可能有点过分)

Grails并没有以这种方式提供任何帮助。由于这是浏览器中如何处理元素的问题,DOM和Grails通常会处理服务器端的问题


另一种方法是重构代码,使其不依赖于元素ID,而是基于更一般的分类。使用类名将是一种很好的方法。取决于您的要求,这可能会或可能不会很好地工作。

除了我的答案,还要检查您的javascript绑定,您缺少绑定的
“click”
事件的结束双引号。对不起……我目前没有访问我的项目的权限。这里的语法很好,所以这只是我问题中的一个错误。我的方法是有效的,我只是觉得应该有更好的方法来生成ID。也许没有?误读了这个问题,我的错。对这种方法有哪些担忧?在我看来,它看起来不错。我只是觉得用时间作为id生成器很奇怪。我想模板在同一时间呈现的可能性很小。Travis,如果你真的关心这个问题,那么在模板顶部生成的ID中添加一个随机数,或者添加一个GUID或UUID。