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.