Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将光标重新聚焦到无效的输入元素_Javascript_Jquery_Jsp - Fatal编程技术网

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方法主体,我可以在需要时进一步帮助您。