Ajax更新g:在IE7中选择问题

时间:2011-08-17 15:04:34

标签: ajax grails prototypejs

我有以下问题,我认为这与浏览器有关。我有一个公司简介,我希望能够通过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部分地抑制了异常,所以我无法看到会发生什么。

感谢您的帮助!

2 个答案:

答案 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过滤器的情况下测试它仍然有效。