Да, это «особенность» ... ха-ха ... столкнулся с этим некоторое время назад. Вот несколько «уловок», а затем очень хакерский способ работы с ними (хотя и эффективный, если вы планируете иметь много подчиненных форм):
- Когда вы создаете диалог, jquery запоминает его и сохраняет в отдельном элементе div, а затем никогда не возвращает его обратно (да, документация заключается в том смысле, что элемент никогда не возвращается туда, где он был)
- По моему опыту, если после этого вы будете слишком часто связываться со скрытыми элементами, вы можете нарушить работу диалогового окна в будущем. Лучше всего просто создать новое диалоговое окно из нового содержимого (особенно, если в вашем приложении их много ... кодирование каждой подчиненной формы очень быстро утомительно).
- Если вы не можете повторно использовать элементы div, вам придется их клонировать и переименовать (что я и делаю ниже)
После закрытия диалога фрагмент под «клонирует» содержимое диалога, переименовывает его атрибут id, затем добавляет измененное содержимое в «sub_form_container», создавая, таким образом, новый диалог / форму каждый раз, когда пользователь закрывает диалог. Надеюсь, это поможет!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<link type="text/css" href="ui.css" rel="stylesheet" />
<script type="text/javascript" src="j.js"></script>
<script type="text/javascript" src='ui.js'></script>
<script type="text/javascript">
$(document).ready(function() {
newDialogs(2);
});
function newDialogs(idCounter) {
$('#d1').unbind().bind('click', function() {
$('#d'+ idCounter.toString()).dialog({close: function(event, ui){
var newSubForm = $('#d'+idCounter.toString()).clone();
idCounter += 1;
newSubForm.attr('id', 'd'+idCounter.toString()).attr('class', '').attr('style', '');
$('#sub_form_container').append(newSubForm);
newDialogs(idCounter);
$('ui-dialog').remove()
}
});
});
}
</script>
</head>
<body>
<h1>Element above</h1>
<div>
<div id='d1'>Activate dialog</div>
<div id='sub_form_container'>
<div id='d2'>Dialog content <input type='text' /></div>
</div>
</div>
<h1>Element below</h1>
</body>
</html>