题
...
$(document).ready(function(){
$('form').submit(function(){
$('input#second').focus();
return false;
});
$('#first').blur(function(){
alert('blur');
});
});
...
<form>
<input id=first><br>
<input id=second><br>
<input type=submit>
</form>
...
- 加载页面
- 单击第一个输入以使其获得焦点
- 按 Enter 键提交表单
然后会发生以下情况:
- $('form').submit() 被调用并且
- 它将焦点设置到 #second 输入并退出
- #first 失去焦点,#second 获得焦点,但是...
- $('#first').blur() 不被称为
这里有一个 现场演示.
我缺少什么?
谢谢
解决方案 2
根据 这条评论 在jquert bugtracker上,围绕问题的工作是使用
$('input#second')[0].focus();
代替
$('input#second').focus();
是否是bug还有待jq负责人来决定,但我猜是因为
- 该行为似乎是特定于浏览器的
- 没有理由对具有一个元素的数组调用 focus() 不应该与专门针对该元素调用它相同
感谢大家。夜晚。
其他提示
尼克是对的,你的 HTML 真的很混乱。您还没有结束输入标签或 br(s)。最重要的是,您应该将输入标记中的属性值放在双引号中。
这里的作品是 演示 http://www.jsfiddle.net/dAdG8/
<script type="text/javascript">
$(document).ready(function(){
$('form').submit(function(){
$('input#second').focus();
return false;
});
$('#first').blur(function(){
alert('blur');
});
// logging
$('input').blur(function(){
$('pre').append('blur, ' + this.id + '\n');
});
$('input').focus(function(){
$('pre').append('focus, ' + this.id + '\n');
});
});
</script>
<form>
<input id="first" />
<br />
<input id="second" />
<br />
<input type="submit" />
</form>
不隶属于 StackOverflow