2016-02-12 1 views
-2

J'ai un problème intéressant - lorsque j'effectue un appel AJAX qui actualise cette liste de rendez-vous avec de nouvelles entrées basées sur le chargement de la page ou un filtre qui est entré - la méthode .val() ne pas misjQuery .val (#) ne change pas la sélection après l'appel AJAX - fonctionne si débogage/pause

C'est ce que le succès de la méthode AJAX fera - essentiellement le fait reculer le menu déroulant AppointmentList avec de nouvelles entrées:

    $.map(data, function (item) { 
         $('#AppointmentList').get(0).options[$('#AppointmentList').get(0).options.length] = new Option(item.AppointmentTime, item.ID); 

        }); 

C'est ce qui appelle la fonction qui contient simplement la méthode $ .ajax() qui re-popula teste la liste déroulante #AppointmentList. Lorsque je récupère le nouveau jeu de valeurs, j'en ai toujours besoin pour que l'ancien «rendez-vous» soit pré-rempli.

  var tempVal = $('#AppointmentList').val(); 
      DropDownList(); 
      $('#AppointmentList').val(tempVal); 

Cela ne fait rien, et le premier élément dans la recréée liste est sélectionnée.

Cependant si je mets un point d'arrêt sur:

$('#AppointmentList').val(tempVal); 

Ensuite, il semble assez de temps a passé pour ce menu déroulant pour pouvoir être changé - s'il y a un point d'arrêt, et je continue - le menu déroulant sera Revenez à la valeur que je veux que ce soit si je débogue le Javascript.

Des idées sur la façon de refactoriser cela? Je pensais que peut-être quand nous ferons la fonction $ .map(), nous pouvons définir notre ancienne valeur - mais ce code semble fonctionner ... devrais-je avoir un peu plus de temps entre la fin de l'Ajax et j'ai besoin pour définir à nouveau le .val().

+2

si la fixation d'un point d'arrêt fait fonctionner temporairement, vous avez probablement le rechargement de la page ou quelque chose de similaire, telles que ne pas comprendre la nature asynchrone ajax et callbacks. –

+3

Si vous obtenez une valeur asynchrone, tout ce qui repose sur cette valeur doit être traité dans l'appel 'success' ou être alerté par l'appel' success'. Sinon, vous espérez juste que le moment est venu. –

+1

Mmm ~ Asynchronicity ... Je vais le goûter bientôt. – Draco18s

Répondre

1

Posez une question stupide - trouver une réponse stupide - je suppose. Asynchrone. Duh.

Déplacer ces deux lignes à l'endroit où celui-ci est au-dessus de l'appel .ajax $():

var tempVal = $('#AppointmentList').val(); 

Ensuite, mettre la ligne qui définit la valeur au sein le succès, mais après le $ .map():

$('#AppointmentList').val(tempVal);