我试图在rad网格控件(Telerik)的文本区域中模拟左箭头键和右箭头键。
我有一个特定于浏览器Firefox的错误,其中tab事件(修复此部分)和箭头键不起作用。每个其他浏览器都可以正常工作。
因此,我想使用JavaScript或jquery来模拟箭头键。
以下是我使用的标签事件修复程序。除此之外,我还检查是否按下了键码37(这是左箭头键)。此时我想模拟文本区域中的左箭头按下。
$(document).on('keydown', function (event) {
if (event.keyCode == 9) { //tab pressed
event.preventDefault(); // stops default action
}
});
$('body').keyup(function (e) {
var code = e.keyCode || e.which;
//Left arrow key press
if (code == '37')
{
moveLeft();// This does not trigger the left arrow event
}
//Tab button pressed
if (code == '9') {
//shift was down when tab was pressed focus -1
if (e.shiftKey && code == 9) {
var focused = $(':focus');
var inputs = $(focused).closest('form').find(':input');
inputs.eq(inputs.index(focused) - 1).focus();
}
//tab was pressed focus +1
else {
var focused = $(':focus');
var inputs = $(focused).closest('form').find(':input');
inputs.eq(inputs.index(focused) + 1).focus();
}
}
});
对此问题的任何帮助都表示赞赏
答案 0 :(得分:2)
我通过将光标向后移动一个空间来完成这项工作,下面是我用来模拟左箭头按键的代码。
注 - 要模拟右键,密码为39,并将myval属性设置为-1。
$('body').keydown(function (e) {
var code = e.keyCode || e.which; //Find the key pressed
if (code == '37') {
e.preventDefault(); // stop default action
var elementId = e.target.id;// get id of input text area
var el = document.getElementById(elementId),
myval = 1 // set mouse cursor to move back one space
cur_pos = 0;
if (el.selectionStart) {
cur_pos = el.selectionStart;
}
else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r != null) {
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
cur_pos = rc.text.length;
}
}
if (el.setSelectionRange) {
el.focus();
el.setSelectionRange(cur_pos - myval, cur_pos - myval);
}
else if (el.createTextRange) {
var range = el.createTextRange();
range.collapse(true);
range.moveEnd('character', cur_pos - myval);
range.moveStart('character', cur_pos - myval);
range.select();
}
}