jQuery modal forme de dialogue publication problèmes
J'ai créé un jQuery UI formulaire Modal, et je veux que cette forme de déclencher une publication, mais je vais avoir de la difficulté à la faire fonctionner.
Je sais qu'il ya tout à fait quelques articles basés sur l'utilisation de la SimpleModal plugin, et j'ai essayé de les adapter et de remplacer les _doPostback fonction, mais avec pas de joie.
Je pense que le problème est à l'intérieur de l'appel à mon __doPostBack fonction et que les paramètres doivent être. Est-ce le cas?
Voici mon formulaire
<form id="summaryForm" runat="server">
<div id="dialog" title="Quick Booking">
<p>Select user from list or enter name in box</p>
<fieldset>
<p><label>Is machine going out of the office?</label></p>
<asp:RadioButton TextAlign="Left" GroupName="outOfOffice" Text="Yes" ID="optYes" class="radio" runat="server" />
<asp:RadioButton TextAlign="Left" GroupName="outOfOffice" Text="No" ID="optNo" class="radio" runat="server" Checked="true" />
<label for="dropLstUser">User:</label>
<asp:DropDownList ID="dropLstUser" runat="server" />
<input type="text" name="txtUser" id="txtUser" value="" class="text" />
<label for="txtStartDate">Start Date:</label>
<input type="text" id="txtStartDate" name="txtStartDate" class="datepicker" />
<asp:HiddenField ID="assetField" runat="server" />
<%--<button onclick="performPostBack('summaryForm')">Postback</button>--%>
</fieldset>
</div>
//--------------------------------
Voici le code JavaScript:
<script type="text/javascript">
$(function() {
$("#dialog").dialog({
bgiframe: true,
height: 300,
modal: true,
buttons: {
'Close': function() {
alert("closing");
$(this).dialog("close");
__doPostBack = newDoPostBack;
__doPostBack("aspnetForm",null);
}
}
});
});
function newDoPostBack(eventTarget, eventArgument)
{
alert("postingback");
var theForm = document.forms[0];
if (!theForm)
{
theForm = document.aspnetForm;
}
if (!theForm.onsubmit || (theForm.onsubmit() != false))
{
document.getElementById("__EVENTTARGET").value = eventTarget;
document.getElementById("__EVENTARGUMENT").value = eventArgument;
theForm.submit();
}
}
</script>
Vous devez vous connecter pour publier un commentaire.
Après la création de votre boîte de dialogue il suffit de déplacer la boîte de dialogue de retour dans votre formulaire. Exemple:
Cela a fonctionné pour moi. La publication des œuvres de trouver.
Être conscient qu'il y a un paramètre supplémentaire dans l'INTERFACE utilisateur de jQuery v1.10. Il y a un appendTo paramètre qui a été ajouté, à l'adresse de ASP.NET solution de contournement que vous utilisez pour re-ajouter l'élément à la forme.
Essayer:
"AppendTo" option fonctionne pour moi.
$("#dialog").dialog({ ..., appendTo:"la forme" });
Voir: http://api.jqueryui.com/dialog/#option-appendTo
Merci beaucoup pour le post de csharpdev!
Le code suivant fait pour ma page:
Un effronté hack que j'ai utilisé est de créer un normal .NET bouton avec des zones de texte, etc. à l'intérieur d'un div sur la page, à l'aide de jQuery obtenir le HTML pour que la div, l'ajouter à la boîte de dialogue, puis retirez le code HTML dans l'original div pour éviter l'id de la duplication.
Et le script:
J'ai réussi à résoudre le problème - sans doute pas le meilleur moyen mais voici ce que j'ai fait.
La boîte de dialogue ne serait pas de publication parce que jQuery UI prend le bouton envoyer de la forme et l'ajoute au bas de la balise body, donc quand vous essayez de publication sur le bouton, il ne sait pas ce que c'est l'affichage.
J'ai mis ceci en modifiant le code jQuery UI en changeant ce:
À ceci:
Il n'est pas l'idéal de modifier le code source de la bibliothèque, mais c'est mieux que rien.
Qu'il fonctionne comme prévu lorsque j'ai utilisé
au lieu de
Lorsque nous joindre au Formulaire et rouvrez la boîte de dialogue, j'ai eu des problèmes avec les mises en page et les z-index.
L' __doPostBack fonction prend le contrôle, qui sont des causes de la publication et un argument si nécessaire. Vos exemples de JavaScript et votre balisage ne semblent pas à la hauteur. Par exemple, où j'ai cité ci-dessus, vous faites référence à aspnetForm, cela change l'ID de la forme et essayer de nouveau.
Assurez-vous que l'ID que vous utilisez pour le client, le script est le même que l'ID du client de la ASP.NET de contrôle lors de l'exécution. Si un contrôle réside dans un INamingContainer alors il aura un identifiant unique basé sur son conteneur parent, de sorte YourControlID deviendra YourINaminContainerID_YourControlid.
Laissez-nous savoir le résultat.
Je peux obtenir ce travail si j'en ai un de chaque. Un div, un script, et un lien. Dans mon cas, la boîte de dialogue permettant à l'utilisateur de laisser une "note" par enregistrement de base de données. Je n'ai pas de boutons sur mon dialogue, juste la valeur par défaut en haut à droite "x" pour fermer la boîte de dialogue.
Mais j'essaie de faire ce travail dans un ColdFusion requête en boucle.. Plusieurs enregistrements, chacun ayant leur propre boîte de dialogue, bouton de script associé, et div. Je vais changer l'Id de façon dynamique, de sorte qu'ils sont tous uniques (qui est, en ajoutant un _XX où XX est la clé primaire de l'enregistrement à tous les id).
Quand j'ai étendre ce modèle, le fait d'avoir plusieurs boîtes de dialogue, les scripts, les divs.. Si je ouvrir chaque boîte de dialogue pour modifier le correspondant de la "note" pour ce disque, elle enregistre uniquement le DERNIER. Devrais-je faire de la .parent().appendTo sur un bouton, cliquez sur vs automatiquement? Quelque part c'est de se confondre.
Si je n'ouvre pas la boîte de dialogue (ne pas apporter des modifications via la boîte de dialogue) et de lancer un dump sur le formulaire de résultats, je vois tous les champs de dialogue à venir sur le post comme prévu.
Quand je regarde le code HTML brut produit... Tous les Id sont uniques et sont appelés de façon appropriée. Je pensais que je recevais de collision sur un conflit avec un nom/id quelque part, mais tout semble bon sur ce front.
Mon script:
Mon div:
Mon bouton: