5 votes

Événement de fermeture de fenêtre de Kendo UI : empêcher la fermeture de la fenêtre

Nous créons un message d'avertissement pour une application comportant plusieurs formulaires. Dans les pages simples, c'est très facile, nous détectons simplement les changements dans les éléments du formulaire et si un utilisateur veut décharger la page, nous lui montrons le message d'avertissement.

Mais... nous avons aussi quelques formulaires dans Kendo Windows, la chose est que nous devons montrer ce même message de confirmation si un utilisateur veut fermer la fenêtre. C'est le script que nous avons maintenant :

$('div:has(div[data-role="window"])').find('a:has(span.k-i-close)').live('click', function (e) {
    if (formHasChanged) {
        alert('pepe');
        return false;
    }
    return true;
});

Le problème avec ce script est qu'il n'empêche pas la fenêtre de se fermer. L'événement de fermeture semble se produire avant notre alerte. Cette solution peut fonctionner http://www.kendoui.com/forums/ui/window/new-event-onclosing.aspx mais nos fenêtres sont créées à la volée.

Quelqu'un a-t-il une idée de la façon de régler ce problème ?

Merci d'avance !

Le code où nous voulions insérer cette solution de contournement de kendo thingy :

var formHasChanged = false;
$('form.withWarningMessage').find('input,select,textarea').live('change', function () {
    formHasChanged = true;
    window.onbeforeunload = function () {
        if (formHasChanged) {
            return confirmWarningMessage;
        }
    };
    $('input:submit').live('click', function () {
        formHasChanged = false;
    });
});

9voto

Petur Subev Points 11984

Il importe peu que vous créiez les fenêtres à la volée. Si vous pouvez les créer, vous pouvez lier un tel gestionnaire. Si le code qu'Alex Gyoshev a partagé n'est pas bon.

Vous pouvez lier un gestionnaire initialement comme ceci :

$("#window").kendoWindow({
    close:function(e){
        if (!confirm("are you sure?"))
        e.preventDefault();
    }
})

Partagez les détails de votre installation, il devrait y avoir un moyen d'intégrer l'une de ces approches dans votre cas.

3voto

vapcguy Points 48

Je suis tombé sur l'endroit où le Kendo Window .Events(events => events.Close("onClose") n'a tout simplement pas tiré, du tout, point final, pour moi. Peut-être un bug de Kendo. Mais cela dit, je l'ai contourné en utilisant le code du lien que vous avez posté :

$("#myWin").data("kendoWindow").bind("close", function(e) {
    if (!confirm("Are you sure?"))
        e.preventDefault();
}); 

Vous pouvez le mettre comme une routine totalement séparée du code que vous avez posté - il n'a pas à y figurer. Si vous créez vraiment dynamiquement de nouvelles Kendo Windows à la volée, vous devriez leur donner à toutes des ID uniques et individuels, et ensuite mettre le code ci-dessus dans une fonction, en passant dans cet ID et en remplaçant "#myWin" avec cet ID passé, dynamiquement généré, de sorte que chaque fenêtre obtient le bind .

Plus d'informations sur Kendo Windows : http://demos.telerik.com/kendo-ui/window/events

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X