Javascript 如何将光标重新聚焦到无效的输入元素
我有一个页面,其中一组文本框是根据装运的物品数量创建的:Javascript 如何将光标重新聚焦到无效的输入元素,javascript,jquery,jsp,Javascript,Jquery,Jsp,我有一个页面,其中一组文本框是根据装运的物品数量创建的: <c:forEach var="num" begin="1" end="${qtyToShip}" step="1" varStatus ="status"> <tr> <td> <input class="form-med" type="text" name="shipItems[${num - 1 }].barCode" id="shipItems[${num - 1
<c:forEach var="num" begin="1" end="${qtyToShip}" step="1" varStatus ="status">
<tr>
<td>
<input class="form-med" type="text" name="shipItems[${num - 1 }].barCode" id="shipItems[${num - 1 }].barCode" onchange="if(!G2Step2Validate(this,'${shippingCommand.boxType}')){$(this).focus();}" />
</td>
<td>
<input class="form-med" type="text" name="shipItems[${num - 1 }].shipCompanyBarCode" onkeyup="if (!(event.keyCode==16 || (event.keyCode==9 && event.shiftKey))) {UPSStep2Validate(this);}"/>
</td>
</tr>
</c:forEach>
以下是我希望发生的事情。当用户输入条形码时,我需要进行一个AJAX调用,以验证条形码是否有效(是否可供使用,是否正确用于正在装运的物品,以及是否已在该订单上使用过-防止重复扫描)
使用DWR for AJAX和该服务都可以正常工作
问题是,如果验证失败,我希望焦点返回到有问题的字段。这并没有发生。焦点总是指向下一个输入框
我尝试过处理不同的事件:更改、模糊、键控等。我尝试过将焦点放在javascript中,尝试过jQuery、javascript等,但没有成功
正在寻找有关如何将焦点放回导致问题的输入框的建议/解决方案。如果使用onblur,您甚至可以设置焦点。问题在于触发onchange事件的时间和时间
<input class="form-med" type="text" name="shipItems[0].barCode" id="shipItems[0].barCode" onblur="if(true){this.focus();}" />
要确保光标位于IE中的末尾,可以添加onfocus事件:
<input class="form-med" type="text" name="shipItems[0].barCode" id="shipItems[0].barCode" onblur="if(true){this.focus();}" onfocus="this.value = this.value;" />
由于AJAX的性质,最初的方法是无效的。就是
<input class="form-med" type="text" name="shipItems[${num - 1 }].barCode" id="shipItems[${num - 1 }].barCode" onchange="if(!G2Step2Validate(this,'${shippingCommand.boxType}')){$(this).focus();}" />
做不到。我想出的解决办法是
<input class="form-med" type="text" name="shipItems[${num - 1 }].barCode" id="shipItems[${num - 1 }].barCode" onchange="G2Step2Validate(this,'${shippingCommand.boxType}');" />
然后在进行ajax调用的javascript函数中,如果出现错误,则可以控制设置焦点。您是否尝试调用要获得焦点的DOM元素的“.focus()”方法?这就是你所要做的。问题在于我正在进行一个ajax调用。因此,在ajax调用完成时,焦点似乎已经改变了。因此,调用this.focus()不会起作用,因为“this”已被移动到下一个dom对象。@boyd4715很抱歉,如果G2Step2Validate包含异步Ajax调用,则必须从该Ajax调用的回调中设置焦点。因为G2Step2Validate的第一个参数是这个,所以将它分配给一个变量,并从Ajax回调中调用yourVariable.focus()。如果您提供G2Step2Validate方法主体,我可以在需要时进一步帮助您。