Sì , questa è una 'caratteristica' ... haha ... ci è andata dentro un po 'di tempo fa. Qui ci sono alcuni 'gotchyas' e poi un modo davvero hackity di trattare con loro (anche se efficace se hai intenzione di avere molti sottomoduli):
- Quando si crea una finestra di dialogo, jquery lo ricorda, e lo memorizza in un div separato, quindi non lo riporterà mai (sì, la documentazione si trova nel senso che l'elemento non torna mai dove era)
- La mia esperienza è stata che se dopo avessi incasinato troppo gli elementi nascosti, potresti rompere le future funzionalità di dialogo. È meglio semplicemente creare una nuova finestra di dialogo dai nuovi contenuti (specialmente se l'applicazione ha molti di questi ... codificare ogni sottomaschera manualmente diventerà noioso molto rapidamente).
- Se non è possibile riutilizzare i div, dovrete clonare loro & rinominarli (che è quello che faccio qui di seguito)
alla chiusura della finestra di dialogo, il frammento di sotto 'cloni' il contenuto del la finestra di dialogo, rinomina l'attributo id, quindi aggiunge i contenuti modificati a un 'sub_form_container', generando così una nuova finestra di dialogo/modulo ogni volta che un utente chiude la finestra di dialogo. Spero che questo ti aiuti!
<!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>
Questo è fantastico. È più facile dell'approccio della risposta accettata. Questa è una "caratteristica" davvero schifosa, dovrebbero davvero risolvere questo schifo. – Milimetric
Molto efficace. Assicurati solo di non chiudere 'div's con' id's. – geowa4
Come gestiresti le modali con gli id? Tutto funziona a meno che non lo chiuda senza attivare la duplicazione. – Mikhail