Dans mon application Web ASP.NET, j'essaie de créer une manière universelle d'utilisateurs d'avertissement avant de naviguer à côté d'un formulaire lorsqu'il a apporté des modifications, en utilisant JQuery. Jolies choses standard, mais après avoir cherché beaucoup de recherches, je n'ai pas encore trouvé une technique qui fonctionne.
Voici ce que j'ai à ce stade: p>
addToPostBack = function(func) { var old__doPostBack = __doPostBack; if (typeof __doPostBack != 'function') { __doPostBack = func; } else { __doPostBack = function() { old__doPostBack(); func(); } } } var isDirty = false; $(document).ready(function() { addToPostBack(function() { alert("Postback detected.") clearDirty(); }); $(':input').bind("change select keydown", setDirty); window.onbeforeunload = function(e) { var msg = "You have unsaved changes. " if (isDirty == true) { var e = e || window.event; if (e) { e.returnValue = msg; } return msg; } }; }); setDirty = function() {isDirty = true;} clearDirty = function() {isDirty = false;}
5 Réponses :
Vous pouvez toujours créer une classe de page héritée qui a un Ensuite, vous n'avez pas à le gérer à un niveau spécifique de la commande, mais plutôt le niveau de formulaire / page. P> personnalisé code> /
oncharload code> méthode ajoute dans l'exécution immédiate JavaScript. p>
Pas clair sur ce que vous suggérez. Qu'est-ce que cette méthode / méthodes ferait-elle?
intéressant, mais ... pourquoi ne faites-vous pas tout avec jQuery? MAINTENANT, si cela provoque toujours le même problème ( Décharger code> déclenchement avant
Soumettre code>), vous pouvez essayer un autre arborescence d'événement em>, donc au lieu d'appeler
__ dopostback code> directement que vous faites ... p>
setTimeout(function( ) {
__doPastBack(defaultSubmitControl || $('form :submit[id]').get(0).id, '');
}, 1); // I think using 0 (zero) works too
Je m'occupe de cela aussi, mais ce que j'ai trouvé jusqu'à présent, une solution qui utilise tous les contrôles HTML forts> au lieu de contrôles Web ASP.NET, avez-vous pensé à cela?
<script type="text/javascript"> $(document).ready(function () { $("form").dirty_form(); $("#btnCancel").dirty_stopper(); }); </script>
Vous devez travailler en suivant essentiellement la position de la souris. Gardez à l'esprit que vous pouvez toujours obtenir des valeurs positives à votre valeur Y (d'où ma Voici le JavaScript que j'ai ajouté Pour suivre les modifications de la souris et capturer l'événement OnBeForeRunload: P>
<form name="Show"> <input type="hidden" name="MouseX" value="0" size="4"> <input type="hidden" name="MouseY" value="0" style="display:block" size="0"> </form>
Je suis tombé sur ce poteau pendant que Googling pour une solution pour faire la même chose en MVC. Cette solution, adaptée de l'herbe ci-dessus, semble bien fonctionner. Comme il n'y a rien de spécifique MVC à ce sujet, il devrait également fonctionner aussi bien pour PHP, ASP classique, ou tout autre type d'application utilisant HTML et JQUERY.
var isDirty = false; $(document).ready(function () { $(':input').bind("change select keydown", setDirty); $('form').submit(clearDirty); window.onbeforeunload = function (e) { var msg = "You have unsaved changes. " if (isDirty == true) { var e = e || window.event; if (e) { e.returnValue = msg; } return msg; } }; }); setDirty = function () { isDirty = true; } clearDirty = function () { isDirty = false; }
Vous pouvez simplement tricher et vérifier le code SO source pour voir ce qu'ils font.
Ainsi utilise à l'avant -1load, mais c'est MVC == Aucun post-packs == n'a pas le problème particulier de l'herbe.