我想从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
}
}
]
}
},
],
答案 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}}。上面的代码和演示现在已修复。