При условии, что у вас есть главная страница с кучей вкладок jQuery Ajax и каждая вкладка ajax загружает страницу в панель содержимого страницы / div.
page.html
----/home\---/users\---
|<div id="page-content">|
| page content gets |
| loaded in here |
|</div> |
На странице, в которую вкладка входит ajax, поместите это вверху:
т. в users.html
$(document).ready(function()
{
$('.delete-user-form').each(function(){
if($('.delete-user-form').length > 1)
$(this).detach();
});
$('#delete-user').dialog({
autoOpen: false,
height: 200,
width: 300,
modal: true,
buttons: {
Cancel: function() {
$(this).dialog('close');
},
'Save': function() {
$('#delete-user-form').submit();
$(this).dialog('close');
}
}
});
$('#delete-user-button').click(function(){
$('#delete-user').dialog('open');
});
});
И это готовая форма в users.html, которая будет превращена в диалоговое окно:
<div id="delete-user" class="delete-user-form" title="Delete User" style="display:none;">
<form action="/admin/users/delete" id="delete-user-form" method="POST">
<input type="hidden" id="user-id" name="userID" />
<table cellspacing="0" cellpadding="5px" border="0" id="delete-user-form-table" style="display:none;">
<tr>
<td>
Do you really want to delete:
</td>
<td>
<input type="text" id="user-name" />
</td>
</tr>
</table>
</form>
</div>
Теперь, как описывает OP, каждый раз, когда пользователь переключается между вкладками и возвращается на эту страницу, модальное диалоговое окно div (id = "delete-user") дублируется.
Первый бит javascript перебирает все дублирующиеся диалоги и удаляет все, кроме последнего, из DOM, так что в итоге вы получите только один по желанию.
Поместите кнопку / ссылку / и т.д. на страницу с идентификатором, указанным в верхнем бите, чтобы открыть диалоговое окно.
т. <input type="button" id="delete-user-button" value="Delete User" />
Открытие диалогового окна таким образом предотвращает дублирование, найденное OP, когда он пропущен: autoOpen: false,
из параметров настройки диалога и вызвал диалог напрямую.