除非窗口处于焦点位置,否则文本字段不会聚焦

时间:2015-01-10 00:49:50

标签: javascript angularjs forms greasemonkey

我有一个Greasemonkey脚本可以自动输入用户信息。但是在提交表单之前,必须将字段放在焦点上(我认为他们使用AngularJS来验证是否输入了有效的名称/电子邮件)。所以在我的代码中我做了:

document.getElementById('name').value = "Name here"; //Enter name in field
document.getElementById('name').focus(); //Focus on the field

这种方法很好但仅在窗口处于活动状态时才有效。如果窗口未激活,它将输入名称,但该字段将不会聚焦(因此无法提交)。是否有任何修改可以解决这个问题?

编辑:我很难提供一个例子,因为代码必须从一个不活动的窗口运行,但这里是输入字段的代码。

<input id="namefield[name]" name="name" ng-model="nameField.form.name" ng-pattern="nameRegex()" placeholder="John Doe" required="" style="width: 246px" type="text" class="ng-valid-pattern ng-dirty ng-valid ng-valid-required">

1 个答案:

答案 0 :(得分:1)

AngularJS是由AJAX驱动的,所以它可能是一个时间问题。 JS,特别是计时器,is slowed down on pages that don't have focus

因此,仅仅使用支持AJAX的技术就足够了。 EG:

// ==UserScript==
// @name     _Focus the name input
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/
waitForKeyElements ("#name", focusInput, true);

function focusInput (jNode) {
    jNode[0].focus ();
}

请注意问题代码列表:<input id="namefield[name]"... 但搜索了身份name 如果这不是一个错误,那就表明AngularJS正在重写HTML(我还没有学到很多AngularJS) - 这将进一步证明原始脚本的工作原理是由于赢得比赛条件。也就是说,根本不可靠。