datepicker de jQuery ne fonctionne qu'une fois et n'est pas affiché la deuxième fois
ASP.NET MVC3 /jQuery 1.9.1 /l'INTERFACE utilisateur de jQuery 1.10.2
J'ai une page sur laquelle j'ai ouvert une boîte de dialogue modale après avoir cliqué sur un Ajax.ActionLink
. À l'intérieur de cette boîte de dialogue, j'ai un champ de saisie et un datepicker
associés. Quand j'ouvre la boîte de dialogue pour la première fois, je peux cliquer sur le datepicker bouton (ou à l'intérieur du champ associé, de sorte qu'il reçoit le focus, showOn
est fixé à both
), et le datepicker montre comme prévu. Je peux, alors que la boîte de dialogue modale est ouvert, faites-le aussi souvent que je veux, le datepicker montre à chaque fois. Quand je ferme la boîte de dialogue modale (par l'intermédiaire d'un joint $("ui-widget-overlay").click(function(){...});
puis l'ouvrir à nouveau, le datepicker ne fonctionne plus, pas de problème j'ai essayer de cliquer sur le bouton ou dans le champ associé.
J'ai essayé de déboguer le code jQuery, et les deux fois les lignes de code en cours d'exécution sont les mêmes (et même si le datepicker n'est pas la deuxième fois, le dialogue est ouvert, les méthodes jQuery sont déclenchés) de ce que je peux voir dans le débogueur. Je suis complètement déconcerté, et les méthodes décrites dans ce post seulement aidé en termes de pour montrer le datepicker la première fois, la boîte de dialogue s'ouvre. Un autre post ne semble être liée à un malentendu comment le showOn
paramètre fonctionne.
J'ai aussi essayé de détruire le datepicker via $("#datepicker").datepicker("destroy");
lors de la fermeture de la boîte de dialogue en vain. Des idées?
Mise à jour
Sur "l'appel de la page":
$(document).ready(function () {
$("#popupDialog").dialog(
{
autoOpen: false,
modal: true,
open: function()
{
$("ui-widget-overlay").click(function()
{
$("#popupDialog").dialog("close");
}
}
});
});
[...]
@Ajax.ActionLink( "Some text", "Action", "Controller", new AjaxOptions {
HttpMethod = "GET",
UpdateTargetId = "popupDialog",
InsertionMode = InsertionMode.Replace,
OnSuccess = "openPopup()"
})
[...]
function openPopup()
{
$("popupDialog").dialog("open");
}
[...]
<div id="popupDialog" style="display: none;"></div>
Le contrôleur d'action est très simple et comme suit:
public ActionResult Action()
{
MyActionModel myActionModel = new MyActionModel();
return PartialView( myActionModel );
}
Entendez-vous le contenu de la boîte de dialogue modale? Il est ouvert via un
Ajax.ActionLink
qui met à jour un id de la cible (div) via le UpdateTargetId
de la propriété. Le contrôleur de l'action de retourner le contenu de la boîte de dialogue modale des requêtes à un service web, puis renvoie une vue partielle avec un peuplé de modèle.Pouvez-vous montrer le code html+js code ?
oui... j'ai mis à jour ma réponse.. check it out
OriginalL'auteur Gorgsenegger | 2013-04-18
Vous devez vous connecter pour publier un commentaire.
Après plus de débogage et de tentatives pour retrouver jQuery événements, j'ai testé si le problème existait avec jQuery UI 1.9.2, il n'a pas. Puis j'ai comparé pertinentes
datepicker
lignes de code qui n'a pas participé à de trop nombreux changements réels.Pour placer une longue histoire courte, le problème décrit dans ma question ci-dessus pourrait être résolu par la modification d'une seule ligne de code de retour de 1.10.2 à ce qu'il était en 1.9.2:
1.10.2 à l'origine des problèmes
1.9.2. version, fonctionne comme prévu
Je ne suis toujours pas sûr de savoir pourquoi ce comportement existe, mais il semble être l'un des rares de la constellation. Une remarque: je n'ai pas de "réinitialiser" le
datepicker
après l'ouverture de la boîte de dialogue contextuelle (ou de demander lePartialView
via AJAX), afin d'avoir une seule source du script dans le cadre de la_Layout.cshtml
est suffisant. Espérons que cela aide quelqu'un d'autre.Vous m'avez aidé à sauver mon beaucoup de temps. Grâce Gorgsenegger..
Fonctionne pour 1.10.4 aussi. Cela a été une bouée de sauvetage. Vous m'avez sauvé (et mon entreprise) des heures et des heures ici.
Également travaillé sur 1.10.3 pour moi, vous m'avez sauvé des heures!
Merci pour le partage
OriginalL'auteur Gorgsenegger
J'ai eu le même problème, et j'ai résolu avec
après la fermeture et la destruction de la popup.
OriginalL'auteur Giuseppe Abbracciavento
Ce qui a fonctionné pour moi, était -
À l'intérieur de la boîte de dialogue, si j'ai plusieurs entrées avec classe
datepicker
, puisFondamentalement, à la suppression de la classe
hasDatepicker
avant l'initialisation dedatepicker
de nouveau.J'ai été sur version 1.8.18 de jquery.l'interface utilisateur.datepicker
$("#datepicker").removeClass('hasDatepicker') lors de la fermeture de la fenêtre de dialogue, il fixe pour moi, merci pour l'astuce!
OriginalL'auteur Vandesh
ensuite, vous devez appeler le datepciker fonction nouveau après la vue partielle, est peuplée... à l'intérieur de fonction de rappel de l'ajax(si vous utilisez cette)...
datepikcker ne sera pas en mesure d'appeler une fonction dynamique de l'ajout d'un élément... depuis votre cible div n'est pas présent au moment de la datepicker est d'abord appelée... vous avez besoin d'appeler le datepicker de la fonction de nouveau pour si de travailler pour l'ajout de la cible DIV
mis à jour
OnSucces
(j'ai mis à jour ma question ci-dessus), comme dans:OnSuccess = "openPopup();$('#datepicker').datepicker();"
mais qui ne fonctionne pas.c'est la fonction que vous faites appel à des succès rite ?? appel datepicker à l'intérieur de cette fonction
Désolé pour la réponse tardive, oui, c'est correct. J'ai essayé d'ajouter le code de sorte que le openPopup méthode est maintenant comme:
$("#popupDialog").dialog("open");$("#datepicker").datepicker();
. Malheureusement, cela n'a rien changé. Comme dit ci-dessus (et c'est ce que je ne comprends pas): Il ne fonctionne pas la première fois que j'ouvre le message, et même alors, les données sont extraites de la webservice et retourné comme unPartialView
. Débogage cliquez sur le bouton pour le datepicker montre dans les deux cas, les mêmes lignes d'être appelé, mais après la première fois, la boîte de dialogue a été ouvert le datepicker de ne pas s'afficher plus.alors essayez-la en fonction open .... avant que la fonction de clic
Même résultat. Ajouté avant de
$("ui-widget-overlay").click(function()...
. Je n'ai vraiment pas l'obtenir, en particulier parce que j'ai comparé les deux réponses (y compris tous les scripts etc) depuis le serveur via le Violoneux, et les deux look, outre le temps de timbres, exactement le même.OriginalL'auteur bipen
J'ai eu un problème similaire, mais ce qui s'est passé pour moi, c'était que la deuxième fois que le dialogue a été chargé, de la datapicker na pas prendre de la valeur.
Le problème était que j'était en train de charger un deuxième temps, le dialogue et ces causer des problèmes.
La solution a été de supprimer la boîte de dialogue après la clôture, quelque chose comme:
J'espère que cela aide quelqu'un!
OriginalL'auteur DaniCE
Vous pouvez le faire en ajoutant une nouvelle fonction à div onclick="focusBlur()"
OriginalL'auteur Sunny
Je voulais re-inititalise le sélecteur de date après modal près que les valeurs sélectionnées lors du premier procès pour établir les dates étaient toujours là.
Donc je ne sais pas pourquoi, mais le code suivant ne fonctionne pas pour moi.
La ligne ci-dessus mentionné dans la documentation na pas aider!.
Suivant est quelque chose que j'ai essayé, j'.e de détruire et de reinititalise la date de sélecteur d'objets.
Voici mon initialiser la fonction :
Espère Que ça aide! RA
OriginalL'auteur Rudresh Ajgaonkar
btw, je vais essayer d'expliquer la façon dont je l'ai résolu, parce que je pense est plus facile de cette façon.
je ne suis pas un expert en la matière, donc pardonnez-moi si je n'utilise pas les bons mots pour l'expliquer.
si u 2 places dans la même page que tu veux charger datepicker, u got pour dupliquer la fonction:
et ajouter la classe "datepicker2" pour la deuxième place, tu veux appeler le datepicker. il fonctionne, presque pour moi
Espère que cela aide quelqu'un, si tu considère que c'est un idiot solution, laissez-moi savoir et je vais l'enlever
have a nice day!
OriginalL'auteur user5512898