繁体   English   中英

如何在onchange()事件之后调用的方法中将焦点设置为输入字段?

[英]How to set a focus to an input field in method invoked after onchange() event?

验证后将焦点设置为输入字段时出现问题。

我有两个领域:从和到。

   <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的解决方案。

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

setTimeout()允许您将函数的执行延迟几毫秒-如果您使用零,则意味着“完成后立即执行此操作”-处理事件,在你的情况下。

尝试这个:

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

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

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

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

附带说明一下,我还建议您不要使用alert()来通知用户错误,因为它会引起震动,并可能在许多Windows系统上引起刺耳的意外声音。 在故障控件旁边显示一个图标或在该控件周围显示一个红色边框可能是一种更好的对待用户的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM