2010-12-10 62 views
0

Je souhaite récupérer à partir d'un événement dataEvents la valeur entrée par l'utilisateur. Je veux seulement autoriser les nombres 0-24 et si l'utilisateur insère un nombre comme 4.5 (écriture allemande) je veux remplacer le "," par un ".". Convertissez ainsi "4,5" en "4,5". Mais j'ai du mal à obtenir les données saisies par l'utilisateur. La méthode que j'utilise retourne toujours vide.jqgrid récupérer les données de la cellule et les manipuler

colModel:[ 
    {name:'sum',index:'sum', width:45, editable: true, sortable:false, 
    editoptions: { dataEvents: [ 
         { 
          type: 'keypress', // keydown 
          fn: function(e) { 
           // console.log('keypress'); 
           var v=$(e.target).text(); 
           alert(v); // v is empty. 
           //reset the target value, actually I want to replace 
           // enter code here a comma with a point 
           // only allow the numbers 0 - 24 
          } 
         } 
        ] 
        } 
    }, 
], 

Répondre

7

Vous pouvez remplacer "," par "." mieux à l'intérieur du gestionnaire d'événements « keyup » avec les éléments suivants

$(this).val($(this).val().replace(/,/,'.')); 

, vous pouvez utiliser suivant dataEvents

dataEvents: [ 
    { 
     type: 'keyup', 
     fn: function(e) { 
      var oldVal = $(this).val(); 
      var newVal = oldVal.replace(/,/,'.'); 
      if (oldVal !== newVal) { 
       $(this).val(newVal); 
      } 
     } 
    }, 
    { 
     type: 'keypress', 
     fn: function(e) { 
      var key = e.charCode || e.keyCode; // to support all browsers 
      if((key < 48 || key > 57) && // if non digit 
       key !== 46 && key !== 44 && key !== 8 && // and not . or , or backspace 
       key !== 37 && key !== 39) { // arrow left and arrow right 
       return false; 
      } 
     } 
    } 
] 

Sur the following demo vous pouvez voir les résultats en direct. Le seul inconvénient que je vois dans l'exemple est le suivant: si vous essayez de taper la virgule au milieu du texte, la position du curseur (caret) sera modifiée à la fin de l'entrée après la virgule de remplacement à pointer. Probablement ce n'est pas un vrai problème dans votre cas. Si vous voulez enregistrer la position du curseur, vous devez probablement le faire document.selection en utilisant IE ou .selectionStart et .selectionEnd pour Firefox.

MISE À JOUR: Je résolu le problème avec l'utilisation de e.keyCode à l'intérieur de l'événement keypress dans Firefox. Je suis l'information de here et utilise maintenant e.charCode || e.keyCode au lieu de e.keyCode. Le code ci-dessus et la démo sont maintenant corrigés.

+0

Oleg, c'est génial! Je vais essayer dans un instant, mais la démo en direct (wow obtenir une démo en direct) est déjà exactement ce que je cherchais! –

+0

Merci Oleg. Cela fonctionne parfaitement bien! Vous avez sauvé mon week-end ;-) –

+0

@ Tom Tom: Bienvenue! Bon week-end! – Oleg