如何使Javascript focus()方法在输入文本框的onBlur事件中工作?

如何使Javascript focus()方法在输入文本框的onBlur事件中工作?,javascript,dom,xhtml,dom-events,Javascript,Dom,Xhtml,Dom Events,对我来说,Javascriptfocus()方法可以很好地工作,如果我在按钮和onClick事件中使用它,但是在文本框中使用onBlur,它就不工作了。谁能给我指点一下吗 <html> <head> <script type="text/javascript"> function displayResult() { var inp1=document.getElementById("text1").value; var

对我来说,Javascript
focus()
方法可以很好地工作,如果我在按钮和onClick事件中使用它,但是在文本框中使用
onBlur
,它就不工作了。谁能给我指点一下吗

<html>
<head>
<script type="text/javascript">
function displayResult()
{
var inp1=document.getElementById("text1").value;
var inp2=inp1.length;
if(inp2==0)
{
alert("Field 1 cannot be left Empty");
//document.getElementById("text1").value="";
document.getElementById("text1").focus();
}
}
</script>
</head>
<body>
<input type="text" name="text1" id="text1" onBlur="displayResult();"/>
<input type="text" name="yext2" id="text2" />


</body>
</html>

函数displayResult()
{
var inp1=document.getElementById(“text1”).value;
var inp2=inp1.1长度;
如果(inp2==0)
{
警报(“字段1不能为空”);
//document.getElementById(“text1”).value=“”;
document.getElementById(“text1”).focus();
}
}

自从你发布问题以来,我用不同的技术对你的问题进行了一个小时的实验。在我看来,通过输入上的事件,您无法将焦点设置在自身上

不过,还有另一种可能的解决办法。提交表单时,您可以调用
displayResult()
,检查
text1
是否为空,如果为空则取消提交,并将焦点设置在
text1
上。我已经为你重写了代码

<html>
<head>
<script type="text/javascript">
function displayResult()
{
var inp1=document.getElementById("text1").value;
var inp2=inp1.length;
if(inp2==0)
{
alert("Field 1 cannot be left Empty");
document.getElementById("text1").focus();
return false;
}
}
</script>
</head>
<body>
<form onsubmit="return displayResult();">
<input type="text" name="text1" id="text1" />
<input type="text" name="yext2" id="text2" />
<input type="submit"  />
</form>

</body>
</html>

函数displayResult()
{
var inp1=document.getElementById(“text1”).value;
var inp2=inp1.1长度;
如果(inp2==0)
{
警报(“字段1不能为空”);
document.getElementById(“text1”).focus();
返回false;
}
}
希望这有助于


平安降临…

当模糊事件触发时,无法对元素重新应用焦点。使用间隔值为
0
的计时器将对焦呼叫延迟到之后:

函数displayResult(){
var inp1=document.getElementById(“text1”).value,
inp2=inp1.1长度;
如果(inp2==0){
警报(“字段1不能为空”);
//document.getElementById(“text1”).value=“”;
setTimeout(函数(){
document.getElementById(“text1”).focus();
}, 0);
}
}

您需要在聚焦场时设置较小的延迟

setTimeout(函数(){field.focus()},10)

比如:

<html>
<head>
<script type="text/javascript">
function displayResult(obj)
{
  var inp1=obj.value;
  var inp2=inp1.length;
  if(inp2==0)
  {
    alert("Field 1 cannot be left Empty");
    setTimeout(function(){obj.focus()}, 10);
  }
}
</script>
</head>
<body>
<form>
<input type="text" name="text1" id="text1" onblur="displayResult(this);"/>
<input type="text" name="yext2" id="text2" />
<input type="submit">
</form>
</body>
</html>

函数显示结果(obj)
{
var inp1=目标值;
var inp2=inp1.1长度;
如果(inp2==0)
{
警报(“字段1不能为空”);
setTimeout(函数(){obj.focus()},10);
}
}
如果要将通知消息显示为警报,我建议您不要在验证输入时使用onblur。这很烦人,它会发出无休止的警报。
在Submit事件上验证表单。

添加一些代码,说明您如何尝试执行此操作。您好,Tasneem,欢迎使用StackOverflow。请为您的问题提供一个示例和一段代码。即使您成功地请求了焦点(我假设是返回),onBlur()方法仍有可能在焦点实际传递之前被调用;这意味着,一旦您对焦点的请求完成,系统就会通过提供焦点来完成onBlur()功能。。。在你仔细要求之后。一种可能的解决方法是让onBlur()启动一个非常短的计时器,比如1000毫秒,然后在该计时器处理程序中设置回焦点。这应该给系统足够的时间来完成焦点的传递,但阻止用户在其他地方做任何事情。对输入模糊的验证更合适,只要您使用不显眼的方法,例如突出显示不正确的输入。你是对的,模态警报通常被认为是突兀和令人沮丧的。是的,我的意思是将通知显示为警报。谢谢,我已经更新了我的答案。
setTimeout()
对我不起作用,0、10或100毫秒-(尝试在元素上设置焦点,然后返回false;在元素失去焦点之前onblur会触发。。这似乎是不真实的。你从哪里得到的信息?你能演示一下吗?我用这个简单的方法尝试过,结果是当触发模糊事件时,输入已经失去焦点。@Pumpkinzz:你是正确的,它一定是错误的assu。)我做出的承诺;-)