我有一个使用jQuery创建动态控件的表单。我已经使用jQuery对控件进行了验证。我正在验证模糊事件的控件。这里的问题是我需要将焦点设置在模糊事件验证失败的同一控件上。
我做过这样的事情:
$(propVal1).blur(function () {
if(!ValidateNumber(this, propName1)) {
alert('Value should be numeric in ' + propName1);
setTimeout(function() {$(this).focus();}, 1);
}
});
其中propVal1表示动态创建的输入控件,propName1是属性的字符串名称。
答案 0 :(得分:1)
发生这种情况的原因是您的输入控件是窗口中唯一的控件,因此在失去焦点后,整个窗口失去焦点,您无法将输入聚焦在没有焦点的窗口中。
这是我为证实这一点所做的测试html:
<form>
<input id="my_input" type="text" />
<input id="my_input2" type="text" />
</form>
<script type="text/javascript">
$("#my_input").blur( function () { alert('bad input'); setTimeout( function() { $(window).focus(); $("#my_input").focus() }, 1 ); return false } );
</script>
如果您注释掉第二个输入,则代码将无效!
一种可能的解决方案是在输入后有一个不可见的输入,以便在第一个模糊时模糊焦点。