我有一长串输入字段列表,这些输入字段是根据数据库中的数据创建的,或多或少是这样的:
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 -->
}
答案 0 :(得分:3)
让我印象深刻的是你在行中缺少撇号
document.getElementById('thiselementsid).focus();
在“thiselementsid”之后。我不知道这是否是你问题的根源,或者它只是示例代码。
有些后续代码也可能会调用document.getElementById('thiselementsid').blur()
的某些内容(模糊是失去焦点的顺序)。 Evan在你的问题附加评论中的建议将解决这个问题 - setTimeout
会延迟焦点的设置,直到调用blur()方法之后。
还有其他可能性,其中大多数都很讨厌。如果您仍然遇到问题,请在编辑中告诉我们。在这种情况下,提供更多周围的代码可能会很好。
答案 1 :(得分:-1)
你也可以像这样设置它。
document.getElementById('thiselementsid').focus() = true;