2

我有一长串从数据库中的数据创建的输入字段,或多或少像这样:

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 -->

}

4

2 回答 2

3

让我印象深刻的一件事是您在行中缺少撇号

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

在“thiselementsid”之后。我不知道这是您问题的根源还是只是示例代码。

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

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

于 2013-10-27T17:05:16.970 回答
-2

你也可以这样设置。

document.getElementById('thiselementsid').focus() = true;
于 2018-04-12T08:35:19.827 回答