javascript、getelementbyname 和焦点

Bri*_*ian 5 html javascript inputbox getelementsbyname

我正在尝试创建一个函数,该函数将查看用户名(如果无效),然后向用户发送警报,清除用户名字段,然后将用户名字段重新置于焦点中。我正在尝试使用 getElementsBynName() 函数来完成这一切。除了让现场重新成为焦点之外,一切都在进行。我的代码如下。有没有人有什么建议。

function uchecker(uname)
{
var validUname = uname.search(/^\w+@sabc.com$/);
if(validUname != 0)
{
    alert("You have entered an invalid username. \n The username must be a valid @sju.edu    email    address value " + document.getElementsByName('uname')[0].value);
    document.getElementsByName('uname')[0].value = null;
    document.getElementsByName('uname')[0].focus();

    /I have also tried  document.getElementsByName('uname').focus, document.getElementsByName('uname')[0].value.focus();
}
Run Code Online (Sandbox Code Playgroud)

}

因此,在 Java 脚本运行之前,焦点字段会更改为下一个字段,即我的密码输入框……它也有自己的验证功能。我有办法让我的 javascript 代码在下一个文本框(密码框)获得焦点之前为我的用户名字段运行吗?

Rob*_*obG 0

想必您的控件的形式如下:

<form ...>
  Username: <input type="text" name="uname" onblur="uchecker(this)">
  <span id="unameMsg"></span>
  <br>
  Password: <input type="password" name="password">
  ...
</form>
Run Code Online (Sandbox Code Playgroud)

所以检查器功能可以是:

function uchecker(element) {

  // If fail validation, show message, clear input, return focus      
  if (!/^\w+@sabc.com$/.test(element.value)) {
    document.getElementById(element.name + 'Msg').innerHTML = 'You have entered an invalid username. ...';
    element.value = '';
    element.focus();

  // Otherwise, clear message
  } else {
    document.getElementById(element.name + 'Msg').innerHTML = '';
  }
}
Run Code Online (Sandbox Code Playgroud)

但这会锁定用户先完成用户名字段,然后才能执行其他操作。