Ja , das ist ein "Feature" ... haha ... ist vor einer Weile hineingelaufen. Hier ein paar ‚gotchyas‘ sind und dann ein wirklich hackity Art und Weise des Umgangs mit ihnen (wenn auch wirksam, wenn Sie viele subforms haben vorhast):
- Wenn Sie einen Dialog zu erstellen, erinnert sich jquery es und speichert sie in einem separaten div, dann legt es nie zurück (yep, die Dokumentation liegt in dem Sinne, dass das Element nie dahin zurückgeht, wo es war)
- Meine Erfahrung war, dass, wenn Sie danach die versteckten Elemente zu viel durcheinander bringen, Sie könnten zukünftige Dialogfunktionen unterbrechen. Es ist besser, nur ein neues Dialogfeld aus neuen Inhalten zu erstellen (besonders, wenn Ihre Anwendung viele davon hat ... das Codieren jedes Unterformulars von Hand wird sehr schnell mühsam).
- Wenn Sie nicht die divs wiederverwenden können, werden Sie klonen müssen sie & sie umbenennen (das ist, was ich tun unten)
Nach den Dialog zu schließen, das Snippet unten ‚Klonen‘ der Inhalt Der Dialog benennt sein ID-Attribut um und hängt den geänderten Inhalt an einen 'sub_form_container' an, so dass jedes Mal, wenn ein Benutzer den Dialog schließt, ein neues Dialogfeld/Formular erstellt wird. Hoffe das hilft!
<!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>
Das ist genial. Es ist einfacher als die akzeptierte Antwort. Das ist ein wirklich beschissenes "Feature", sie sollten diesen Mist wirklich reparieren. – Milimetric
Sehr effektiv. Stellen Sie nur sicher, dass Sie 'div' mit 'id's nicht schließen. – geowa4
Wie würdest du mit modals mit id umgehen? Alles funktioniert, wenn ich es nicht schließe, ohne die Duplizierung auszulösen. – Mikhail