我需要根据其值禁用grails中的select元素。问题是,当我开始添加disable属性时,代码出了问题。
一个例子是当表单发送到后端时,就好像该select元素没有值,并且发送的值为null。但是,当我检查DOM时,元素中有一个selected属性。我试图删除那个禁用的属性,因为我觉得它与我遇到的错误有关,我是对的,因为删除后,一切都正常工作。
这是选择标记
<g:select name="detail-entryNameId"
value="${journalEntryName.savingId}"
from="${journalEntryNameInstanceList}"
optionKey="savingId"
optionValue="displayName"
readonly="${journalEntryInstance.paymentMade}"
/>
关于这个元素的另一件事是它可以尽可能多地出现,这意味着我有一个表,并且在每一行中,该元素都存在,所以我不能简单地操纵它。
我还在这篇文章how can i make a textfield read only in grails?中读到&#34; 如果您使用disabled =&#34; true&#34;该值实际上不会在表单中提交,因此应使用<g:field/>
标记。&#34;这证明了disable属性会影响元素的值。
如何禁用select元素,同时仍能正确获取其值?
答案 0 :(得分:0)
问题是在HTML中仅存在禁用属性会禁用标记。忽略属性的值(true / false)。
在这种情况下,解决方案是根据条件使用<g:if>
创建带或不带已禁用属性的标记。
在您的情况下,由于即使禁用了代码也需要该值,您可以添加<g:hiddenField>
具有相同名称和值的已禁用选择