Ajax Обновление g: выберите в выпуске IE7 - PullRequest
2 голосов
/ 17 августа 2011

У меня есть следующая проблема, которая, я думаю, связана с браузером. У меня есть профиль компании, и я хочу иметь возможность добавлять адреса некоторых штаб-квартир компании через 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 обновляется пустым combobox (никакие значения вообще, даже старые). После Ctrl + R на всей странице я вижу, что новый список добавлен в список.

Я использую версию Grails 1.3.7. версия prototype.js - 1.6.1. Исправлена ​​ли эта проблема в IE7, и если да, я хотел бы знать, как это сделать. Это довольно нервно, потому что ошибка не возвращается - очевидно, prototype.js частично исключает исключения, поэтому я не могу видеть, что происходит.

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Всякий раз, когда я использовал formRemote, я обновлял содержимое элемента, но не сам элемент. Вы можете попытаться присвоить идентификатор ячейке таблицы

   <td id="updateMe" valign="top" class="name">
        <g:select id="hasHeadquarters" name="hasHeadquarters" optionKey="id"  from...

, а затем обновите эту ячейку, выбрав

<g:formRemote ... update="updateMe" ...>

Christian

0 голосов
/ 22 августа 2011

Наконец-то !!! Помещение формы в div и обновление div вместо формы делает трюк для IE7. Кроме того, проверил это без фильтра ajax, и это все еще работает.

...