将焦点设置为验证错误时输入元素不起作用

时间:2013-10-27 16:36:48

标签: javascript php

我有一长串输入字段列表,这些输入字段是根据数据库中的数据创建的,或多或少是这样的:

foreach ($data as $value) { 
...

<input type="text" name="date_earned$row" id="date_earned$row" value = "$date_earned" onchange="changeDate(this)">
...
}

onchange脚本是这样的(注意:日期不是标准日期,所以我不是要验证正常日期)。如果出现错误,它不会让我将焦点设置回我刚刚更改的元素。我将焦点设置为不同的元素没有问题。为什么呢?

<script type="text/javascript">
function changeDate(sel) {
  var theDate = sel.value;
  var isValid = true;
  if (theDate) {
 <!-- .... some stuff in here to validate the date, sets isValid = false if it is not correct format} -->
}

 if (!(isValid)) {
<!--    ... do some stuff in here to display the error message -->
  document.getElementById('thiselementsid').focus(); <!-- this doesn't work when 'thiselementsid' is the id of the element which just lost focus-->
  document.getElementById('someotherelement').focus(); <!-- this works, but not if 'someotherelement' is the id of the last focused element -->

}

2 个答案:

答案 0 :(得分:3)

让我印象深刻的是你在行中缺少撇号

document.getElementById('thiselementsid).focus();

在“thiselementsid”之后。我不知道这是否是你问题的根源,或者它只是示例代码。

有些后续代码也可能会调用document.getElementById('thiselementsid').blur()的某些内容(模糊是失去焦点的顺序)。 Evan在你的问题附加评论中的建议将解决这个问题 - setTimeout会延迟焦点的设置,直到调用blur()方法之后。

还有其他可能性,其中大多数都很讨厌。如果您仍然遇到问题,请在编辑中告诉我们。在这种情况下,提供更多周围的代码可能会很好。

答案 1 :(得分:-1)

你也可以像这样设置它。

document.getElementById('thiselementsid').focus() = true;