用mootools映射键盘键

时间:2013-07-06 08:18:13

标签: events keyboard mootools

我希望让回车键的行为与表单上的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');
    }
    });
});

如何使用指定密钥触发按键事件?任何帮助将不胜感激。

2 个答案:

答案 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了解详情。