2010-12-03 4 views
7

Lorsque je clique sur l'élément select, je dois me souvenir de l'ancienne valeur de l'élément sélectionné.
Ce code fonctionne dans FF, CHROME et OPERA au lieu de IE.
jquery click (rappelez-vous OLD VALUE)

  1. Rappelez-vous l'ancienne valeur.
  2. Choisissez l'option de sélection et remplacez l'ancienne valeur par une option sélectionnée!

code:

$(document).ready(function() { 
     $('#viewTableOrders tr td > select').click(function() { 
      oldCurrentPath = $(this).val(); 
      oldId = $(this).attr('title'); 
      oldCurrentDate = $('#viewTableOrders tr#vagon' + oldId + '> td >input.input_ver1').val(); 
      dataAjax = {}; 
     }); 


     /* event on change path */ 
     $('#viewTableOrders tr td > select').change(function() { 
      //do something... + old value 
     }); 
    }); 

Répondre

11

Il semble que le problème est que le 2ème clic (choisir une nouvelle option) se déclenche avant la change-event.

Essayez d'utiliser l'accent au lieu de clic:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
<select> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select>Old value is:<span></span> 
<script> 
$(document).ready(
    function() 
    { 
    $('select').focus(function() 
         { 
          //store old value 
         $(this).data('oldValue',$(this).val());} 
        ); 
    $('select').change(function() 
         { 
          //do something 
         $('span').text($(this).data('oldValue')); 
          //trigger focus to set new oldValue 
         $(this).trigger('focus'); 
         }); 

    } 
); 
</script> 

(exemple utilise également des données suggérées par prodigitalson)

+0

+1 parce que je viens de réaliser que je n'ai pas vraiment répondu à la partie du problème de la question, je viens de recommander une implémentation différente pour stocker les données! – prodigitalson

+0

bonne idée .. il travaille avec FOCUS !! – Dezigo

5

Je voudrais utiliser l'infrastructure data pour cela:

$('#viewTableOrders tr td > select').click(function() { 
    var old = {}; 
    old.currentPath = $(this).val(); 
    old.id = $(this).attr('title'); 
    old.currentDate = $('#viewTableOrders tr#vagon' + old.id + '> td >input.input_ver1').val(); 
    old.ajaxData = {}; 
    $(this).data('oldData', old); 

}).change(function() { 
    var oldData = $(this).data('oldData'); 
    if(typeof old == 'object'){ 
    // do stuff with oldData 
    }  
}); 
+0

merci !! ça marche aussi! – Dezigo

0

La question est un peu vieux, mais je pense que nous devons aussi regarder la clé des/down, sinon utiliser le curseur pour modifier les valeurs de sélection ne provoque pas la mise à jour de l'ancienne valeur. Cela a fonctionné pour moi, basé sur le code @ Dr.Molle:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
    <select> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    </select>Old value is:<span></span> 
    <script> 
    $(document).ready(
     function() 
     { 
     $('select').focus(function() 
      { 
      //store old value 
      $(this).data('oldValue',$(this).val()); 
      }); 
     $('select').change(function() 
      { 
       //do something 
       $('span').text($(this).data('oldValue')); 
       //trigger focus to set new oldValue 
       $(this).trigger('focus'); 
      }); 
     $('select').keydown(function() 
      { 
      //store old value 
      $(this).data('oldValue',$(this).val()); 
      }); 
     $('select').keydown(function() 
      { 
       //do something 
       $('span').text($(this).data('oldValue')); 
       //trigger focus to set new oldValue 
       $(this).trigger('focus'); 
      }); 

     } 
    ); 
    </script>