2009-09-25 7 views
0

J'ai des boutons d'image auxquels des gestionnaires d'événements jQuery sont attachés.Quel est le moyen le plus simple de réactiver une action submit() qui a été annulée avec 'return false'?

Je souhaite effectuer un appel AJAX dans l'événement click() pour déterminer si l'action doit être autorisée. Comme je fais un appel ajax async, je dois retourner 'false' pour annuler immédiatement l'événement et attendre la réponse.

$('[id^=btnShoppingCartStep_]').click(function() { 

var stepName = this.id.substring("btnShoppingCartStep_".length); 

$.ajax({ 
      type: "POST", 
      url: $.url("isActionAllowed"), 
      data: "requestedStep=" + stepName, 
      dataType: "json", 

      success: function(data) { 

       if (data.allowed) { 

        // need to resume the action here 
       } 
       else { 
        AlertDialog(data.message, "Not allowed!"); 
       } 

      } 

     }); 

     return false; 
    }); 

Je dois trouver la meilleure façon de reprendre l'événement click si l'appel AJAX détermine qu'il devrait être autorisé.

Toute façon de faire ce que je peux venir avec semble maladroite, comme:

1) supprimer gestionnaire d'événements à partir des boutons

2) simuler un clic sur le bouton qui a été cliqué

Y a-t-il une bonne façon de faire cela qui me manque?

+1

Pourquoi ne pouvez-vous vérifier que dans l'arrière-plan avant que l'utilisateur veut toujours cliquer sur « Soumettre » ? Envisagez également de faire une demande bloquée à la place. – vava

+0

pourquoi n'essayez-vous pas de bloquer l'interface utilisateur [http://malsup.com/jquery/block/]? – TheVillageIdiot

Répondre

0

Affectez un ID à votre formulaire. Disons que vous l'appelez myForm. Où votre // need to resume the action here est, utilisez ceci: méthode

$("#myForm").trigger("submit"); 
0

1) Appelez simplement submit() du formulaire.

$("#FormID").submit(); 

2) En outre, si ce que vous voulez est d'intercepter les soumissions de formulaire pour que, pour, vous pouvez faire un peu différemment (par exemple, si vous pouvez soumettre le formulaire via> 1 bouton):

$("form").submit(function() { 
    ... 
1

Combien de temps faut-il pour confirmer la validité de la demande? Quoi d'autre serait l'utilisateur à faire pendant ce temps? Pourquoi ne pas avoir le serveur faire la validation?

Est-ce trop risqué? Vous pouvez simplement transmettre les données au serveur, demandez-lui de déterminer si elles sont valides. Si ce n'est pas le cas, il dit à Ajax "non autorisé", la fonction alerte l'utilisateur. S'il a aimé les données, il n'est pas nécessaire de reprendre l'action comme cela a déjà été fait.

+0

merci pour l'info supplémentaire. il y aura une validation côté serveur supplémentaire - je ne veux tout simplement pas que les utilisateurs perdent les choix qu'ils ont déjà faits sur la page actuelle quand ils essaient d'aller sur une autre page à laquelle ils ne peuvent pas aller. Je n'ai pas le temps maintenant de dupliquer la logique côté serveur entièrement en javascript. C'est plus une courtoisie pour l'utilisateur que tout ce que je suis en train de mettre en œuvre maintenant. –

1

si vous avez besoin de soumettre le formulaire:

$('#form_id').submit(); 

si vous avez besoin de continuer cette fonction:

var allowed_actions = {}; 

$('[id^=btnShoppingCartStep_]').click(function() { 

var stepName = this.id.substring("btnShoppingCartStep_".length); 
var $click_me_again = $(this); 

if (!allowed_actions[stepName]) { 
    $.ajax({ 
      type: "POST", 
      url: $.url("isActionAllowed"), 
      data: "requestedStep=" + stepName, 
      dataType: "json", 

      success: function(data) { 

      if (data.allowed) { 

       // need to resume the action here 
       allowed_actions[stepName] = true; 
       $click_me_again.click(); 
      } 
      else { 
       AlertDialog(data.message, "Not allowed!"); 
      } 

      } 

     }); 
     return false; 
    } // end if 
    // continue function (check passed) 
}); 
Questions connexes