我正在尝试将焦点设置在一个元素上,然后立即将其设置回以前关注的项目。这是HTML:
@@
我试过这个:
<input id="em3" type="email" />
<p class="error" tabindex="0">Please fill out the email field</p>
和此:
$(this).next('.error').focus();
$(this).prev('input').focus();
但两者都不起作用。焦点停留在“.error”元素上。
有什么想法吗?
答案 0 :(得分:0)
问题是:
这是因为setTimeout处理程序中的
$(this)
指的是 窗口,可能与引用的值不同 处理程序外的$(this)
。所以你需要分配你的$(this)
外部范围
var ThisIt = $(this);
ThisIt.next('.error').focus();
setTimeout(function(){
ThisIt.focus();
}, 2000);
<强>演示强>
$('#em3').on('click',function(){
var ThisIt = $(this);
ThisIt.next('.error').focus();
setTimeout(function(){
ThisIt.focus();
}, 2000);
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="em3" type="email" />
<p class="error" tabindex="0">Please fill out the email field</p>
&#13;
注意: 1st: 点击输入以查看操作.. 2nd: as @Barmar在评论中说..不需要使用
prev()
。