2012-04-09 27 views
0

我有一个使用jQuery创建动态控件的表单。我已经在使用jQuery的控件上应用了验证。我正在验证模糊事件上的控件。这里的问题是我需要将焦点设置在模糊事件验证失败的同一控件上。将焦点设置在模糊事件验证失败的同一控件上,JQuery

我做了这样的事情:

$(propVal1).blur(function() { 
    if(!ValidateNumber(this, propName1)) { 
     alert('Value should be numeric in ' + propName1); 
     setTimeout(function() {$(this).focus();}, 1); 
    } 
}); 

凡propVal1代表动态创建的输入控制,propName1是属性的字符串名称。

+0

为什么你现在不能为你工作? – 2012-04-09 15:25:55

+0

我们可以看到字符串propVal1指的是什么? – 2012-04-09 15:31:38

+0

是的,因为验证正确触发正确显示属性名称。我这样做是因为整个表单是动态生成的。 – IrfanRaza 2012-04-09 15:34:46

回答

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> 

如果您注释掉第二个输入的代码将无法正常工作!

一种可能的解决方案是在输入后有一个不可见的输入,以在第一个模糊时捕捉焦点。