Events 使用mootools映射键盘键

Events 使用mootools映射键盘键,events,keyboard,mootools,Events,Keyboard,Mootools,我希望使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'); } }

我希望使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');
    }
    });
});
如何使用指定的键触发按键事件?任何帮助都将不胜感激。

请查看

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

下面是我如何在类似情况下实现它的一个简单示例:

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

myKeyEv1.addEvents({
    'shift+h': myApp.help()   // <- calls a function opening a help screen
});
var myKeyEv1=新键盘({
defaultEventType:'keydown'
});
myKeyEv1.addEvents({
“shift+h”:myApp.help()/请查看

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

下面是我如何在类似情况下实现它的一个简单示例:

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

myKeyEv1.addEvents({
    'shift+h': myApp.help()   // <- calls a function opening a help screen
});
var myKeyEv1=新键盘({
defaultEventType:'keydown'
});
myKeyEv1.addEvents({

“shift+h”:myApp.help()/这将起作用,但它依赖于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输入capture?为什么,它是多行的…无论如何,要在键盘级别执行它,请查看Syn

上述操作将因隐藏元素(您可以过滤)和禁用元素等而失败。不过,您知道了-
focus()
。不确定在
input[type=radio | checkbox | range]
等上它将执行什么操作


p、 因为
.firevent()
将只调用绑定的事件处理程序,而不是实际为您创建事件,所以您的代码无法工作。

这可以工作,但它依赖于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输入capture?为什么,它是多行的…无论如何,要在键盘级别执行它,请查看Syn

上述操作将因隐藏元素(您可以过滤)和禁用元素等而失败。不过,您知道了-
focus()
。不确定在
input[type=radio | checkbox | range]
等上它将执行什么操作


p、 您的代码将无法工作,因为
.firevent()
将只调用绑定的事件处理程序,而不是实际为您创建事件。

到目前为止,这似乎是不可能的…我希望被证明是错误的:)到目前为止,这似乎是不可能的…我希望被证明是错误的:)谢谢,我尝试了这段代码,但这里的问题是$$()数组不一定按顺序返回元素,因为TexTaaRas在输入之后将遵循。此外,如果动态添加新的项,则需要刷新数组。然后需要考虑正确保存TabDe指标和<代码>。
-或者跨浏览器手动触发密钥事件-这不是一个小任务。我决定向特定输入和文本区域添加特定类,这导致它们以正确的顺序返回。谢谢,我尝试了此代码,但这里的问题是$$()数组不一定按顺序返回元素,因为TexTaaRas在输入之后将遵循。此外,如果动态添加新的项,则需要刷新数组。然后需要考虑正确保存TabDe指标和<代码>。
-或者跨浏览器手动触发关键事件-这不是一项小任务。我决定向特定输入和文本区域添加特定类,从而使它们以正确的顺序返回。