Oui , c'est une 'fonctionnalité' ... haha ... y est tombé dessus il y a quelque temps. Voici quelques « gotchyas », puis une façon vraiment hackity de traiter avec eux (quoique efficace si vous avez l'intention d'avoir de nombreux sous-formulaires):
- Lorsque vous créez une boîte de dialogue, jquery se souvient, et stocke dans un div séparé, alors ne le remet jamais (oui, la documentation réside dans le sens que l'élément ne retourne jamais à l'endroit où il était)
- Mon expérience a été que si vous faites trop de désordre avec les éléments cachés, vous pourriez casser la fonctionnalité de dialogue future. Il est préférable de créer simplement une nouvelle boîte de dialogue à partir de nouveaux contenus (surtout si votre application en contient plusieurs ... coder chaque sous-formulaire à la main deviendra fastidieux très rapidement).
- Si vous ne pouvez pas réutiliser les années div, vous devrez les cloner & les renomment (qui est ce que je fais ci-dessous)
A la fermeture de la boîte de dialogue, l'extrait ci-dessous « clones » le contenu de la boîte de dialogue, renomme son attribut id, puis ajoute le contenu modifié à un 'sub_form_container', générant ainsi un tout nouveau dialogue/formulaire chaque fois qu'un utilisateur ferme la boîte de dialogue. J'espère que cela t'aides!
<!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>
C'est génial. C'est plus facile que l'approche de la réponse acceptée. Ceci est une "fonctionnalité" vraiment merdique, ils devraient vraiment réparer cette merde. – Milimetric
Très efficace. Assurez-vous de ne pas fermer 'div's avec' id's. – geowa4
Comment traiteriez-vous les modaux avec des identifiants? Tout fonctionne à moins que je le ferme sans déclencher la duplication. – Mikhail