当前位置: 首页 > 知识库问答 >
问题:

按回车键将焦点移到下一个控件

顾曾笑
2023-03-14

我在Angular 1.x上发现了一些项目,用户可以通过按Enter键将焦点移到下一个控件上。

'use strict';
app.directive('setTabEnter', function () {

    var includeTags = ['INPUT', 'SELECT'];

    function link(scope, element, attrs) {
        element.on('keydown', function (e) {
            if (e.keyCode == 13 && includeTags.indexOf(e.target.tagName) != -1) {
                var focusable = element[0].querySelectorAll('input,select,button,textarea');
                var currentIndex = Array.prototype.indexOf.call(focusable, e.target)
                var nextIndex = currentIndex == focusable.length - 1 ? 0 : currentIndex + 1;

                if (nextIndex >= 0 && nextIndex < focusable.length)
                    focusable[nextIndex].focus();

                return false;
            }
        });
    }

    return {
        restrict: 'A',
        link: link
    };
});

但这对Angular 2不起作用。我如何在Ingular 2中设置对下一个控件的焦点?

共有1个答案

储仲渊
2023-03-14
import { Directive, ElementRef, HostListener, Input, Renderer } from '@angular/core';
@Directive({
    selector: '[onReturn]'
})
export class OnReturnDirective {    
    private el: ElementRef;   
    @Input() onReturn: string;
    constructor(private _el: ElementRef,public renderer: Renderer) {
        this.el = this._el;
    }  
    @HostListener('keydown', ['$event']) onKeyDown(e:any) {
        if ((e.which == 13 || e.keyCode == 13)) {
            e.preventDefault();
            let control:any;
            control = e.srcElement.nextElementSibling;
            while (true){                
                if (control) {
                  if ((!control.hidden) && 
                     (control.nodeName == 'INPUT' || 
                      control.nodeName == 'SELECT' || 
                      control.nodeName == 'BUTTON' || 
                      control.nodeName == 'TEXTAREA'))
                     {
                            control.focus();
                            return;
                        }else{
                            control = control.nextElementSibling;
                        }                         
                }
                else {
                    console.log('close keyboard');
                    return;
                }            
            }
        }
    } 
}
 类似资料:
  • 问题内容: 最好的方法是,在单击表单内部的Enter时,将焦点转到下一个输入,而不是使用angularjs提交表单。 我有一个包含许多字段的表单,客户习惯于按Enter键移至下一个输入(来自桌面应用程序)。当用户点击Enter时,angularjs保存表单。我喜欢改变这个。可能吗 ? 问题答案: 我建议制定一个自定义指令。这样的事情。我还没有测试。 这样的事情应该起作用。您可能不得不周到一些东西。

  • 问题内容: 摘要: 在我的桌面应用程序中,我加载了一个Jtable,并且在编辑模式下(如果我按Tab键)我需要将单元格的焦点放在下一个单元格上。 问题: 当我编辑单元格的值,然后按Tab时,焦点丢失。我在网上做了一些搜索,发现发生这种情况是因为在每个Tab上按下Jtable都会重新加载自身。 可能的解决 方案我想到的一个解决方案是获取正在使用的单元格的索引,将其与全局变量相同,然后在Tab键上按一

  • 我有一个windows窗体,我需要当用户按Enter时将焦点设置为下一个控件。任何想法如何实现这一点(不使用关键新闻事件)

  • 让我介绍一下我的问题的场景。我希望在JTable中呈现数据库表的内容。使用这个JTable,我应该能够插入新行、删除行和更新现有行字段的内容。 第一个需要的行为是,当单元格获得焦点时,如果它是可编辑的,它直接进入编辑模式,如果它是字母数字内容,它的所有内容都被选中。(文字、数字、日期等) 下一个需要的行为是键作为键工作,即按键焦点必须向前(从左到右)或向后转移到下一个单元格(如果这是可编辑的,则进

  • 问题内容: 我想在Linux(Ubuntu Linux 9.10)上编写一个程序(使用python),该程序将跟踪我每秒产生的每秒钟按键次数。这包括普通字母键,以及控制/ Shift /空格/等。 是否有某种方法可以挂接到X,以便我可以说“按下键时调用此函数?”。由于我希望在正常工作时在后台运行此功能,因此该函数调用必须能够知道所有程序的所有按键。我想它有点像键盘记录器。 这只是一个私人的事情,所

  • 在C#windows应用程序中,要导航窗体的所有控件(使用Enter键),我使用以下代码: 任何人请帮帮我。