1

在验证输入字段后,我遇到了将焦点设置到输入字段的问题。

我有 2 个字段:from 和 to。

   <spring:message code="template.fields.label.from"/>: 
       <mvc:input  path="templateFields.selectorRangeFrom" 
       onchange="validateNumber('templateFields.selectorRangeFrom',true)"/>
   <spring:message code="template.fields.label.to"/>: 
      <mvc:input path="templateFields.selectorRangeTo"   
     onchange="validateNumber('templateFields.selectorRangeTo',true)"/>

我有方法 validateNumber() 验证字段并在字段无效时返回 false,否则返回 true。但是焦点永远不会停留在无效数字上,它总是会转到下一个对象。

function validateNumber(index,isInteger) {
 var object = document.getElementById(index);
 var value = object.value;   
 if (testNumeric2(value,isInteger)==false)   {
     alert('Please correct the value: ' + value);               
     object.focus();
     object.select();
     return false;  
 } 
return true;    
 }    

我发现如果我添加:event.returnValue=false(在返回 false 之前),那么它适用于 IE。但我找不到 Firefox 的解决方案。

感谢您的任何建议,马塔利

4

2 回答 2

4

setTimeout()允许您将函数的执行推迟几毫秒 - 如果您使用零,这只是意味着,“一旦您完成了您现在正在做的任何事情,就执行此操作” – 处理事件,在你的情况下。

试试这个:

if (! /** check field **/) {
   /** show error **/
   setTimeout((function() { object.focus() }), 0);
}

基本上,您将创建一个专注于输入框的函数,然后指示浏览器在完成事件的默认处理后立即调用它。

于 2009-01-20T20:04:53.977 回答
0

我不确定为onChange返回 false应该是什么意思。如果您只想重新关注问题区域,我建议您通过setTimeout()调用来执行此操作(您必须在输入元素周围创建一个闭包)。

这样,当您尝试聚焦文本框时,事件处理将完成。

作为旁注,我还建议您不要使用alert()来通知用户错误,因为它很刺耳,并且会在许多 Windows 系统上导致刺耳的意外声音。在故障控制旁边显示一个图标或在故障控制周围显示一个红色边框可能是对待用户更好的方式。

于 2009-01-20T19:46:11.173 回答