2012-10-18 1 views
1

J'ai le code suivant. Tout semble bien fonctionner mais c'est juste que parfois, il y a des moments où les avis de confirmation et d'alerte apparaissent plusieurs fois et ils deviennent tout simplement ennuyeux. Y a-t-il des problèmes avec le code suivant? Merci pour tout conseil.Quel est le problème avec cette instruction jquery?

$('.order_stateselect').hover(function(){ 
     var value_text=$(this).find(":selected").text(); 
     var value_code=$(this).find(":selected").val(); 
     $(this).change(function(){ 
      if(confirm('Confirm Order Status Change?')){ 
       var conduct_status_chge=$.post('/seller/helpers/order_status_change.php',{order_item_id:$(this).parent('td').siblings('.order_item_id').text(),order_item_status:$(this).find(':selected').val()},function(data){ 
        alert(data); 
       }) 
       .error(function() { 
        $(this).find(':selected').removeAttr('selected'); 
        $(this).find('option:contains(value_code)').attr('selected','selected'); 
        alert('error'); 

       }); 
      }else{ 
       $(this).find(':selected').removeAttr('selected'); 
       $(this).find('option:contains(value_code)').attr('selected','selected'); 
      } 
     }); 
    }); 

Une brève explication de ce que je fais ici.

Ceci est une selectbox avec plusieurs options. Cette sélection fait partie d'une cellule de tableau dans une liste d'éléments. Par exemple: Chaque ligne contient un élément et pour chaque ligne, il y a une boîte de sélection dédiée à cette ligne spécifique.

1) En vol stationnaire, les valeurs de l'option sélectionnée sont chargées via la valeur de ma base de données lors du chargement de la page.

2) Lorsque l'utilisateur sélectionne une valeur différente dans la zone de sélection et confirme la sélection, je fais un $ .post.

3) Si l'utilisateur appuie sur annuler ou s'il y a une erreur avec l'appel de script qui fait échouer le $ .post, je ramène l'option sélectionnée à la valeur d'origine de la base de données.

Je suis désolé si mon explication n'est pas claire, mais s'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations. Merci.

+0

Je pense que le problème est que vous attribuez un événement à « .order_stateselect » plusieurs fois dans « vol stationnaire ». Et pourquoi auriez-vous besoin du «hover» du tout? Essayez de simplement mettre tout le code dans l'événement 'change'. – NikitaBaksalyar

Répondre

3

Je vais prendre un petit extrait de votre code:

$('.order_stateselect').hover(function(){ 
    var value_text=$(this).find(":selected").text(); 
    var value_code=$(this).find(":selected").val(); 
    $(this).change(function(){ 

Vous joindre un gestionnaire de changement lorsque le curseur de la souris entre dans la zone; Si cela se produit plusieurs fois, votre gestionnaire de changement est également appliqué plusieurs fois.

Vous devez déplacer la .change(...) en dehors de la .hover():

$('.order_stateselect') 
    .hover(function() { ... }) 
    .change(function() { ... }) 
+0

Hmm. Cela ne peut pas fonctionner, si je devais séparer les deux, je ne serai pas en mesure de revenir à sa valeur d'origine. Les deux, value_valeur et valeur_code, seront inutiles car ils ne pourront pas obtenir les valeurs dont j'ai besoin. – Lawrence

+0

@Lawrence Facile, il suffit d'ajouter la valeur précédente en utilisant '.data()'; alors, à l'intérieur du '.change()' vous pouvez vous référer à ces valeurs et les mettre à jour si l'utilisateur a confirmé. –

Questions connexes