我有以下问题,我认为这与浏览器有关。我有一个公司简介,我希望能够通过ajax向公司添加一些总部的地址。所以,我做了以下几点:
我有一个组合框,其中包含地址:
<tr class="prop">
<td valign="top" class="name">
<label for="hasHeadquarters"><g:message code="company.headquarters.label" default="Company Headquarters" /></label>
</td>
<td valign="top" class="name">
<g:select id="hasHeadquarters" name="hasHeadquarters" optionKey="id" from="${de.cirquent.basicdata.Headquarter.list()}" multiple="multiple"></g:select>
</td>
</tr>
以及填写新地址的表单:
<g:formRemote name="addHeadquarter" url="[controller:'company', action:'ajaxAddHeadquarter']" update="hasHeadquarters" onComplete="javascript:Form.reset('addHeadquarter');">
整个提交给控制器:
def ajaxAddHeadquarter = {
def p = params
def hqInstance = new Headquarter(params.headquarter)
if(hqInstance.save(flush:true)){
// some messages
}
render(template:"/shared/updateHQList", params:params)
}
使用模板更新组合框:
<g:select id="hasHeadquarters"
name="hasHeadquarters"
optionKey="id"
from="${de.cirquent.basicdata.Headquarter.list()}"
multiple="multiple"></g:select>
正如您所看到的,简单的场景适用于Chrome,Firefox(4.0和5.0),但它在IE7中不起作用(尚未尝试过IE8)。 “不起作用”我的意思是:新的总部/地址成功保存到数据库,并且还返回总部列表,包括新的总部。会发生什么是使用空的组合框更新comobox(没有任何值,甚至没有旧的组合)。在整个页面上按Ctrl + R后,我可以看到新的hq被添加到列表中。
我使用的grails版本是1.3.7。和prototype.js版本是1.6.1。这个问题是否适用于IE7,如果是这样,我想知道如何。这是非常令人伤脑筋的,因为没有错误返回 - 显然是prototype.js部分地抑制了异常,所以我无法看到会发生什么。
感谢您的帮助!
答案 0 :(得分:1)
每当我使用formRemote时,我都更新了元素的内容,但没有更新元素本身。您可以尝试为表格单元格提供ID
<td id="updateMe" valign="top" class="name">
<g:select id="hasHeadquarters" name="hasHeadquarters" optionKey="id" from...
然后使用您的选择
更新此单元格<g:formRemote ... update="updateMe" ...>
基督教
答案 1 :(得分:0)
最后!!!将表单放在div中并更新div而不是表单,是IE7的诀窍。此外,在没有ajax过滤器的情况下测试它仍然有效。