当您运行此代码并点击input2
时,它将获得焦点,.result
div将输出"f2"
一次。但是当您点击input1
时,脚本会让input2
获得焦点,.result
div会输出"f2"
两次,为什么?
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>blank</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".input1").click(function(){$(".input2").focus();});
$(".input2").focus(function(){$(".result").html($(".result").html()+"f2, ");});
});
</script>
</head>
<body>
<p>
<input class="input1" value="click me to set the input2's focus" />
<input class="input2" value="input2" />
<div class="result"></div>
</p>
</body>
</html>
答案 0 :(得分:7)
答案 1 :(得分:1)
更新:修复...从焦点切换到焦点,删除input2 bug中没有获得焦点。
这似乎只是Internet Explorer的问题。添加一个对preventDefault的调用来修复双焦点问题。 Here's a jsFiddle of it working for me
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>blank</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".input1").click(function(){$(".input2").focus();});
$(".input2").focusin(function(e)
{
e.preventDefault();
$(".result").html($(".result").html()+"f2, ");
});
</script>
</head>
<body>
<p>
<input class="input1" value="click me to set the input2's focus" />
<input class="input2" value="input2" />
<div class="result"></div>
</p>
</body>
</html>
答案 2 :(得分:0)
虽然似乎没有被复制,但我已经看到当多个事件绑定到控件时会出现这种问题。当您最终绑定focus()事件两次时,可能会发生这种情况。可能值得探讨这一点,并在代码之前清除现有绑定。