我希望让回车键的行为与表单上的tab键完全相同。
我被困在fireEvent部分。
var inputs = $$('input, textarea');
$each(inputs,function(el,i) {
el.addEvent('keypress',function(e) {
if(e.key == 'enter') {
e.stop();
el.fireEvent('keypress','tab');
}
});
});
如何使用指定密钥触发按键事件?任何帮助将不胜感激。
答案 0 :(得分:1)
这会起作用但它依赖于dom顺序而不是tabindex
var inputs = $$('input,textarea');
inputs.each(function(el,i){
el.addEvent('keypress',function(e) {
if(e.key == 'enter'){
e.stop();
var next = inputs[i+1];
if (next){
next.focus();
}
else {
// inputs[0].focus(); or form.submit() etc.
}
}
});
});
另外,textarea进入捕获?为什么,这是多线...无论如何,要在键盘级别做,看看Syn。 https://github.com/bitovi/syn
上面的内容将因隐藏元素(您可以过滤)和禁用元素等而失败,但您会明白这一点 - focus()
。不确定它会对input[type=radio|checkbox|range]
等做什么。
P.S。你的代码不起作用,因为.fireEvent()
只会调用绑定事件处理程序,而不是实际为你创建事件。
答案 1 :(得分:0)
查看class keyboard (MooTools More)。
它可以为键激活单个事件,并提供禁用和启用分配给键盘实例的侦听器的方法。
manual has some examples how to work with this class,这里只是一个简单的例子,我是如何在类似的情况下实现的:
var myKeyEv1 = new Keyboard({
defaultEventType: 'keydown'
});
myKeyEv1.addEvents({
'shift+h': myApp.help() // <- calls a function opening a help screen
});
关于示例中的enter
键,您必须在某处return false
阻止输入事件被触发。查看this SO post了解详情。