JQuery:整个表单上的 .focus() 事件?怎样做?
考虑以下 HTML:
<form ....>
<textarea>....</textarea
<input .... />
</form>
现在我想在用户关注任何表单元素时显示帮助部分。当焦点消失时,帮助信息也应该消失。
我的想法是这样的:
$("form").focus(function(){...});
$("form").unfocus(function(){...});
但这似乎行不通。有什么想法吗?非常感谢您的帮助!
汤姆
补充: 非常感谢大家,已经成功了。我使用了lonesomeday的解决方案,但是我的动画还有另一个问题:
$('form').delegate(':input', 'focus', function() {
$("#eintrag").animate({"height": "160px"}, 500)
$("#header").animate({"height": "200px"}, 500)
$("#container").animate({"margin-top": "240px"}, 500)
$(".show").animate({"opacity": "0"}, 500)
$(".hide").animate({"opacity": "1"}, 500)
$("#header_links>p").animate({"opacity": "0"}, 500)
}).delegate(':input', 'blur', function() {
$("#eintrag").animate({"height": "20px"}, 500)
$(".show").animate({"opacity": "1"}, 500)
$("#container").animate({"margin-top": "150px"}, 500)
$(".hide").animate({"opacity": "0"}, 500)
$("#header_links>p").animate({"opacity": "1"}, 500)
$("#header").animate({"height": "110px"}, 500)
});
这意味着每次在表单内更改焦点时我都会获得动画。我该如何改变这个?
consider the following HTML:
<form ....>
<textarea>....</textarea
<input .... />
</form>
Now I want to show a help section when the user is focused on ANY of the form elements. When the focus is gone the help information should too.
My idea was this:
$("form").focus(function(){...});
$("form").unfocus(function(){...});
But it doesn't seem to work. Any ideas? Thanks a lot for your help!
Tom
Addition:
Thank you all a lot, it works. I used lonesomeday's solution, but there is another problem with my animations:
$('form').delegate(':input', 'focus', function() {
$("#eintrag").animate({"height": "160px"}, 500)
$("#header").animate({"height": "200px"}, 500)
$("#container").animate({"margin-top": "240px"}, 500)
$(".show").animate({"opacity": "0"}, 500)
$(".hide").animate({"opacity": "1"}, 500)
$("#header_links>p").animate({"opacity": "0"}, 500)
}).delegate(':input', 'blur', function() {
$("#eintrag").animate({"height": "20px"}, 500)
$(".show").animate({"opacity": "1"}, 500)
$("#container").animate({"margin-top": "150px"}, 500)
$(".hide").animate({"opacity": "0"}, 500)
$("#header_links>p").animate({"opacity": "1"}, 500)
$("#header").animate({"height": "110px"}, 500)
});
This means that I get the animation each time I change focus within the form. How do I change this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
嗯,我会找到所有输入元素并绑定它们,例如
Hmmm I would just find all the input elements and bind against them e.g.
尝试使用 $(":input") (注意冒号)
,焦点的相反事件是模糊,而不是取消焦点
try using $(":input") (mind the colon)
also the opposite event of focus is blur, not unfocus
问题:
focus
的反面是模糊
。unfocus
取消绑定焦点处理程序。:input
) 接收焦点。最好的方法是使用
delegate
:这是最快的方法处理这个。
查看 jsFiddle 示例。
The problems:
focus
isblur
.unfocus
unbinds a focus handler.:input
) that receive focus.The nicest way to do this is with
delegate
:This is the quickest way to handle this.
See jsFiddle example.
请参阅 focus()。它不适合与“表单”元素一起使用,而是与输入、文本区域...等一起
使用
see focus(). It is not intended to be used with 'form' elements, but with input, textarea... etc
Try