Wicket не может перезагрузить страницу при отправке, когда страница содержит iframe

Страница не может быть перезагружена полностью, если ответ содержит iframe после отправки формы с помощью кнопки калитки. Проблема в том, что калитка пытается связать некоторые обработчики событий с window.domready, но терпит неудачу, говоря: «Невозможно связать обработчик события «изменение» с элементом «topRightItemTypeChoice7», потому что элемент не находится в DOM».

Я проанализировал текст ответа с помощью плагина httpfox, и компонент с этим идентификатором существует в ответе.

Ниже приведен фрагмент JS от Wicket, который пытается связать событие.

Wicket.Event.add(window, "domready", function(event) { 
$('#topRightItemTypeChoice7').uniform();;
Wicket.Ajax.ajax({"c":"topRightItemTypeChoice7","ad":true,"u":"./PrDashBoardConfigurationPage?5-2.IBehaviorListener.0-container-configuratorForm-topRightDiv-topRightItemTypeChoice","e":"change","m":"POST"});;

Компонент html из ответа

<select name="topRightDiv:topRightItemTypeChoice" id="topRightItemTypeChoice7">

Все работает нормально, когда я просто удаляю iframe со страницы. Есть идеи, чем отличается iframe от window.domready?


person X-HuMan    schedule 02.12.2015    source источник
comment
Вы проверили, действительна ли результирующая разметка?   -  person svenmeier    schedule 02.12.2015
comment
Только что сделал, и это действительно так, вы можете увидеть результат здесь jsfiddle.net/yvynvaay/1   -  person X-HuMan    schedule 02.12.2015
comment
В скрипте JS нет <iframe>, поэтому сложно сказать, в чем проблема. $('...') найдет элементы DOM только в текущем документе, он не будет искать ни в одном фрейме! Iframe имеет собственный документ.   -  person martin-g    schedule 02.12.2015


Ответы (1)


Я попытаюсь уточнить свой вопрос, потому что я нашел, в чем проблема. Может быть, кто-то захочет это узнать. Проблема заключалась в том, что replaceComponentTagBody метод предоставлен Wicket. Я не упомянул в вопросе об использовании этого метода, что могло бы облегчить людям, которые пытались ответить. Я использовал метод таким образом

replaceComponentTagBody(markupStream, openTag, "<iframe id=''/>");

вместо

replaceComponentTagBody(markupStream, openTag, "<iframe id=''></iframe>");

Разница заключалась в закрывающем теге iframe, где replaceComponentTagBody был чувствителен к этому моменту и не позволял Wicket отображать оставшийся HTML-код.

person X-HuMan    schedule 08.12.2015