1

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

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

4

2 回答 2

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]等。

ps您的代码将不起作用,因为.fireEvent()只会调用绑定的事件处理程序,而不是实际为您创建事件。

于 2013-07-08T17:14:36.497 回答
0

看看课堂键盘(MooTools More)

它可以为键触发单个事件,并提供禁用和启用分配给键盘实例的侦听器的方法。

手册有一些如何使用此类的示例,这里只是一个简单的示例,我是如何在类似情况下实现它的:

var myKeyEv1 = new Keyboard({
    defaultEventType: 'keydown'
});

myKeyEv1.addEvents({
    'shift+h': myApp.help()   // <- calls a function opening a help screen
});

关于enter您示例中的键,您必须在return false某个地方阻止输入事件触发。查看此 SO 帖子以获取更多详细信息。

于 2013-07-07T19:45:04.397 回答