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

Tho*_*mel 0 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
                            }
                        }
                    ] 
                  }
    },
],
Run Code Online (Sandbox Code Playgroud)

Ole*_*leg 7

您可以将','替换为'.' 使用以下内容更好地在'keyup'事件处理程序内部

$(this).val($(this).val().replace(/,/,'.'));
Run Code Online (Sandbox Code Playgroud)

所以你可以使用以下 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;
            }
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

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

更新:我在Firefox中使用事件e.keyCode内部修复了问题keypress.我从这里跟踪信息,现在使用e.charCode || e.keyCode而不是e.keyCode.上面的代码和演示现在已修复.