2010-07-28 1 views
3

Je suis en train d'écrire du code personnalisé pour un CMS pour un site web. Lorsqu'un utilisateur clique sur le bouton de soumission (créé avec l'interface utilisateur jQuery), il appelle l'événement click sur le bouton, qui à son tour appelle un événement submit, qui soumet le formulaire. Ce formulaire vérifie également les champs spécifiques pour voir s'ils contiennent du texte et affiche des messages d'erreur et désactive le bouton d'envoi jusqu'à ce que les problèmes soient résolus. Pour ce faire, j'utilise actuellement .focus(), qui contient une fonction .blur() qui vérifie si l'erreur a été corrigée et supprime l'avis si c'est le cas (et s'il n'y a pas d'autres erreurs, réactive le bouton). Maintenant, le problème que j'ai, c'est que si l'utilisateur édite l'un des champs vérifiés à tout moment, s'ils ne cliquent pas dessus et essaient de soumettre les données du formulaire, la fonction .blur() prend le contrôle (comme il se doit de la façon dont ceci est codé), il faut donc un deuxième clic pour soumettre les données du formulaire.Un moyen de surcharger .blur() si .submit() est appelé dans jQuery?

Existe-t-il un moyen d'avoir .submit() prioritaire sur .blur() dans jQuery afin que ce problème ne puisse pas se produire (pour l'instant je peux simplement dire aux utilisateurs de ne pas faire les étapes pour le provoquer) ?

(Si vous les gars ont besoin de code, je peux essayer de poster quelques morceaux de celui-ci ici.)

+0

S'il vous plaît faire inclure le code, on ne sait pas de votre question ce qui se passe avec votre flou qui est la prévention de soumettre. –

+0

J'ai exactement le même problème – jeje

Répondre

0

Après y avoir réfléchi un peu la nuit dernière, j'ai réalisé que si je vérifiais rapidement si l'erreur était visible ou non avant que j'appelle blur(), cela réglerait mon problème (fait un test rapide et il semble avoir). Merci pour la suggestion sur l'arrêt de propagation d'événement, cependant, je vais devoir garder cela à l'esprit.

2

J'ai essayé de supprimer l'événement de flou sur les champs de saisie et d'utiliser l'événement onFocusout de la fonction de validation de formulaire. Cette solution a fonctionné pour moi.

Autre La meilleure solution consiste à définir une temporisation qui retarde l'action de l'événement de flou avant de déclencher l'événement de clic de bouton.

// pour Namespace timer var SetTimer = { timer: null }

 $('input,select').blur(function() { 
      setTimer.timer = setTimeout(function() { 
       functionCall(); 
      }, 1000); 
     }); 

     $('input,select').focus(function() { 
      setTimer.timer = setTimeout(function() { 
       functionCall(); 
      }, 1000); 
     }); 

     $("#btn").click(function() { 
      clearTimeout(setTimer.timer); 
      functionCall(); 
     }); 
Questions connexes