11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je développe une application web en ASP.NET et j'aimerai avoir une solution pour éviter de que le bouton soit cliquer plusieurs fois par les utilisateurs, ce qui engendrerai plusieurs entrée en base de données. J'utilise de l'AJAX pour exécuter la plus part de mes actions sur mes boutons donc il n'y a pas de rechargement de la page, juste une rafraîchissement du bloc concerné par la modification.
Mes boutons sont des types button.

J'ai essayé plusieurs solution et aucune ne fonctionnait correctement.
Modifié par Quentinnyx (13 Oct 2016 - 12:23)
Pourquoi ne pas passer par une variable globale, qui se reset au chargement de page, et qui s'incrémente au clic. Comme si le var est supérieur à 1. tu disable le clic.
J'ai essayé ceci :
var submit = 0;
function CheckIsRepeat() {
    if (++submit > 1) {
        alert('Test multi-clique.');
        return false;
    }
}


ça marche bien si j'ai un seule bouton sur la page. Dès que j'en ai deux ça marche pu car la page n'est pas rechargé grâce à l'ajax.
Du coup tu veux "empecher" le multi clic sur TOUS les buttons ? ou quelques uns en particuliers? et durant cb de temps ?
Je veux que tout les boutons dans ma page ne puissent pas être cliquer 2 fois, seulement le temps de la durée du traitement. J'aimerai que quand je clique sur le bouton X, seul le bouton X soit désactivé le temps du traitement après il repasse en enable à nouveau.
Modifié par Quentinnyx (11 Oct 2016 - 16:20)
Ok ok,

du coup, au moment du clic, dans ton ajax, au tout début il faut le rendre disabled (this) et dans le résultat success tu le remet en enabled.
J'ai oublié de préciser j'utilise l'ajax grâce aux update panel fournis par ASP.NET du coup tout est transparent pour moi, je n'ai pas accès à ces méthodes onsuccess et onerror.
Merci de ton aide tout de même Smiley smile

J'ai trouvé la solution en JS :


var Page;
function pageLoad() {
    Page = Sys.WebForms.PageRequestManager.getInstance();
    Page.add_initializeRequest(OnInitializeRequest);
}
function OnInitializeRequest(sender, args) {
    var postBackElement = args.get_postBackElement();
    if (Page.get_isInAsyncPostBack()) {
        toastr.options.positionClass = 'toast-top-center'
        toastr.error('Une requête est déjà en cours.');
        toastr.options.preventDuplicates = true;
        toastr.clear();
        args.set_cancel(true);
    }
}   


Grâce au JS on peut accèder à certaines fonction d'asp et du coup on peut les utiliser. Cette fonction va vérifier qu'il y'a une et une seule requête qui s'execute en même temps, en gros, si je clique deux fois par accident sur mon bouton le deuxième clique est ignoré.
Modifié par Quentinnyx (13 Oct 2016 - 12:23)