在查看了如何使用angular设置焦点元素的示例后,我看到他们中的大多数使用一些变量来观察然后设置焦点,并且大多数变量为他们想要设置焦点的每个字段使用一个不同的变量.在一个具有大量字段的表单中,这意味着存在许多不同的变量.
考虑到jquery的方式,但是想要以有角度的方式做到这一点,我做了一个解决方案,我们使用元素的id设置焦点在任何函数中,所以,因为我是一个非常新的角度,我想得到一些意见,如果这种方式是正确的,有问题,无论如何,任何可以帮助我做到这一点的角度更好的方式.
基本上,我创建了一个指令,用于监视用户使用指令或默认的focusElement定义的作用域值,并且当该值与元素的id相同时,该元素集自身焦点.
angular.module('appnamehere')
.directive('myFocus', function () {
return {
restrict: 'A',
link: function postLink(scope, element, attrs) {
if (attrs.myFocus == "") {
attrs.myFocus = "focusElement";
}
scope.$watch(attrs.myFocus, function(value) {
if(value == attrs.id) {
element[0].focus();
}
});
element.on("blur", function() {
scope[attrs.myFocus] = "";
scope.$apply();
})
}
};
});
Run Code Online (Sandbox Code Playgroud)
由于某种原因需要获得焦点的输入将采用这种方式
<input my-focus id="input1" type="text" />
Run Code Online (Sandbox Code Playgroud)
这里设置焦点的任何元素:
<a href="" ng-click="clickButton()" >Set focus</a>
Run Code Online (Sandbox Code Playgroud)
以及设置焦点的示例函数:
$scope.clickButton = function() {
$scope.focusElement = "input1";
}
Run Code Online (Sandbox Code Playgroud)
这是角度很好的解决方案吗?是否有问题,由于我的经验不佳,我还没有看到?
什么相当于selenium.focus()
WebDriver?
element.sendKeys("");
Run Code Online (Sandbox Code Playgroud)
要么
new Actions(driver).moveToElement(element).perform();
Run Code Online (Sandbox Code Playgroud)
我已经尝试了他们两个并且他们工作了,但哪一个总是适用于所有元素?
对于任何元素(例如按钮,链接等),哪一个是正确的方法?这对我很重要,因为该功能将用于不同的UI.
import { Component, ViewChild} from '@angular/core';
import { Keyboard } from 'ionic-native';
@Component({
templateUrl: 'build/pages/home/home.html'
})
export class HomePage {
@ViewChild('input') myInput ;
constructor() {}
ionViewDidLoad() {
setTimeout(() => {
Keyboard.show() // for android
this.myInput.setFocus();
},150);
}
}
Run Code Online (Sandbox Code Playgroud)
1)导入"ViewChild"
import {Component, ViewChild} from '@angular/core';
2)在html模板中创建对输入的引用:
<ion-input #focusInput></ion-input>
Run Code Online (Sandbox Code Playgroud)
3)使用@ViewChild访问您刚才引用的输入组件.
@ViewChild('focusInput') myInput ;
4)触发焦点
每次加载视图/页面时,使用ionViewLoaded()方法触发它.
需要setTimeout
ionViewLoaded() {
setTimeout(() => {
Keyboard.show() // for android
this.myInput.setFocus();
},150); //a least 150ms.
}
Run Code Online (Sandbox Code Playgroud)
4)在Android上显示键盘
import { Keyboard } from 'ionic-native';
调用Keyboard.show()在Android上调用键盘.
5)在iOS上显示键盘 …
将焦点设置为动态加载的DIV中的特定字段的正确方法是什么?
$("#display").load("?control=msgs"); // loads the HTML into the DIV
$('#display').fadeIn("fast"); // display it
$("tex#header").focus(); // ?? neither that
$("input#header").focus(); // ?? nor that
$('#display', '#header').focus() // ?? nor that
$("#header").focus(); // ?? nor that works
Run Code Online (Sandbox Code Playgroud)
将以下HTML提取到display
DIV中:
<div id="display">
<form id="newHeaderForm" class="dataform" action="/" method="post">
<input id="to" type="hidden" value="22" name="to"/>
<dl>
<dt>Header</dt>
<dd>
<input id="header" class="large" type="text" name="header" value="" maxlength="128"/>
</dd>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我有一个带有document.onkeydown
事件处理程序的页面,我将它加载到另一个页面的iframe中.我必须在iframe内部单击才能让内容页面开始"收听".
有没有什么方法可以在外部页面中使用JavaScript将焦点设置到内部页面,所以我不必在iframe内部单击?
编辑:回复评论:
上下文是主窗口是一个类似灯箱的系统,除了代替图片,它显示iframe,每个iframe是一个带有keydown/mousemove处理程序的交互式页面.这些处理程序在显示灯箱之后点击iframe之前不会触发.
我实际上并不像传统意义上的"setFocus"那样"在iframe contentDocument上启用事件处理程序"
我有以下代码片段:
<div id="listbox1div" style="z-index:95; background:white; overflow-y:auto; overflow-x:hidden; width:240; height:314px;">
<a id="focusLink2"></a>
<table id="ptObj_listbox1...
Run Code Online (Sandbox Code Playgroud)
我有一个<div>
动态构建元素的页面(如上所述).这<div>
会在主屏幕顶部显示数据.当页面生成div时,我想设置焦点.我不能在body标签上放一个onLoad函数,因为我不知道什么时候生成div.
一个<div>
标签不能有焦点设置于它直接.所以我<a>
在下面的函数中放了一个带有id 的空标签:
function setTableFocus(count){
var flinkText = 'focusLink'+count;
document.getElementById(flinkText).focus();
}
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误,我知道在页面显示时(通过警报)正在调用该函数.但是,当我使用箭头键或输入按钮时整个页面移动(甚至不是呈现数据的div).
当我点击其中一个表格元素(使用鼠标).之后,keydown事件开始工作.我想要做的是将数据呈现给用户并自动进行键盘驱动.
有没有人有任何建议我怎么能做到这一点?
我让我的游戏没有鼠标运行所以使用指针不是一个选择.当玩家输球时,高分菜单会显示.
这是我的代码
highScore=new MyTextField("Your Name");
highScore.addKeyListener(this);
highScore.setFont(font);
highScore.requestFocusInWindow();
Run Code Online (Sandbox Code Playgroud)
我试过了
highScore.setFocusable(true);
highScore.requestFocusInWindow();
highScore.requestFocus(true);
highScore.requestFocus();
Run Code Online (Sandbox Code Playgroud)
但仍然没有把重点放在我的身上JTextField
.
如何关注它?
在edittext中,输入"Enter"键后,系统会在其中创建一个新行.我想专注于下一个edittext,没有换行.如何编码?我在xml中的代码如下
<EditText
android:id="@+id/txtNPCode"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_alignLeft="@+id/lblNPCode"
android:layout_below="@+id/lblNPCode"
android:layout_centerHorizontal="true"/>
<EditText
android:id="@+id/txtCNPCode"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_alignLeft="@+id/lblCNPCode"
android:layout_below="@+id/lblCNPCode"
android:layout_centerHorizontal="true"/>
Run Code Online (Sandbox Code Playgroud)
我也是setOnKeyListener中的电脑密钥代码
tCNPCode.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == 66) {
Toast.makeText(S_PCode.this, "Enter Key", Toast.LENGTH_LONG).show();
//tNPCode.setFocusable(true);
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud) 我创建了一个应用程序,在其中我使用窗口过程来跟踪窗口中的所有控件.
我的问题是,我如何将焦点初始设置为窗口中第一个创建的控件?
我试图将焦点设置为ASP.NET登录控件内的用户名TextBox.
我曾试图通过几种方式做到这一点,但似乎没有一种方法可行.页面正在加载但不会进入控件.
这是我试过的代码.
SetFocus(this.loginForm.FindControl("UserName"));
Run Code Online (Sandbox Code Playgroud)
和
TextBox tbox = (TextBox)this.loginForm.FindControl("UserName");
if (tbox != null)
{
tbox.Focus();
} // if
Run Code Online (Sandbox Code Playgroud)