jqgrid检索单元格的数据并对其进行操作

时间:2010-12-10 09:19:28

标签: jquery jqgrid

我想从dataEvents事件中检索用户输入的值。我想只允许数字0-24,如果用户插入一个像4,5(德语写作)的数字,我想用“。”替换“,”。因此将“4,5”转换为“4.5”。

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

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

1 个答案:

答案 0 :(得分: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上,您可以看到结果。我在示例中看到的唯一缺点如下:如果您尝试在文本中间键入逗号 ,则光标位置(插入符号)将更改为输入结束后的输入替换逗号指向。在你的情况下,这可能不是一个真正的问题。你确实想保存光标位置,你可能应该这样做 document.selection用于IE或.selectionStart.selectionEnd用于Firefox。

已更新:我修复了Firefox中e.keyCode事件中keypress使用e.charCode || e.keyCode的问题。我遵循here中的信息,现在使用e.keyCode代替{{1}}。上面的代码和演示现在已修复。