2010-12-10 93 views
0

我想从dataEvents事件中检索用户输入的值。我只想让数字0-24,如果用户插入数字如4,5(德语写作),我想用“。”替换“,”。因此将“4,5”转换为“4.5”。jqgrid检索单元格数据并对其进行操作

但我很努力地获取用户输入的数据。我使用的方法总是返回空白。

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 
          } 
         } 
        ] 
        } 
    }, 
], 

回答

7

您可以将','替换为'。'。 “KEYUP”事件处理程序的内部更好地与以下

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

所以,你可以使用以下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; 
      } 
     } 
    } 
] 

the following demo你可以看到结果住。我在示例中看到的唯一缺点如下:如果您尝试在文本的中间键入逗号,则在替换逗号指向后,光标位置(插入符号)将更改为输入的结尾。你的情况可能不是一个真正的问题。它确实需要保存光标位置,您应该对Firefox使用 document.selection或使用IE浏览器的.selectionStart.selectionEnd

已更新:我解决了Firefox中keypress事件中使用e.keyCode的问题。我遵循here的信息,现在使用e.charCode || e.keyCode而不是e.keyCode。上面的代码和演示现在已经修复。

+0

奥列格,这真棒!我会在一会儿尝试一下,但现场演示(哇,现场演示)已经是我正在寻找的! – 2010-12-10 11:45:45

+0

谢谢奥列格。它工作得很好!你救了我的周末;-) – 2010-12-10 12:20:24

+0

@汤姆汤姆:你很欢迎!周末愉快! – Oleg 2010-12-10 12:37:30

相关问题