JQuery:整个表单上的 .focus() 事件?怎样做?

发布于 2024-11-05 05:35:14 字数 1197 浏览 0 评论 0原文

考虑以下 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

尹雨沫 2024-11-12 05:35:14

嗯,我会找到所有输入元素并绑定它们,例如

$(function() {
    $( '#form_id' ).find('input').focus(function() {

        //your function

    });

  $( '#form_id' ).find('input').blur(function() {

        //your function

    });

});

Hmmm I would just find all the input elements and bind against them e.g.

$(function() {
    $( '#form_id' ).find('input').focus(function() {

        //your function

    });

  $( '#form_id' ).find('input').blur(function() {

        //your function

    });

});
薆情海 2024-11-12 05:35:14

尝试使用 $(":input") (注意冒号)

焦点的相反事件是模糊,而不是取消焦点

try using $(":input") (mind the colon)

also the opposite event of focus is blur, not unfocus

〆一缕阳光ご 2024-11-12 05:35:14

问题:

  1. focus 的反面是 模糊unfocus 取消绑定焦点处理程序。
  2. 您绑定到表单元素,而它是表单内的元素(在 jQuery 中,可以通过 :input) 接收焦点。

最好的方法是使用 delegate

$('form').delegate(':input', 'focus', function() {
    $('#help').show();
}).delegate(':input', 'blur', function() {
    $('#help').hide();
});

这是最快的方法处理这个。

查看 jsFiddle 示例

The problems:

  1. The inverse of focus is blur. unfocus unbinds a focus handler.
  2. You're binding to the form element, whereas it is the elements within the form (in jQuery, these can be found with :input) that receive focus.

The nicest way to do this is with delegate:

$('form').delegate(':input', 'focus', function() {
    $('#help').show();
}).delegate(':input', 'blur', function() {
    $('#help').hide();
});

This is the quickest way to handle this.

See jsFiddle example.

度的依靠╰つ 2024-11-12 05:35:14

请参阅 focus()。它不适合与“表单”元素一起使用,而是与输入、文本区域...等一起

使用

$("form input").focus(function(){...}).

see focus(). It is not intended to be used with 'form' elements, but with input, textarea... etc

Try

$("form input").focus(function(){...}).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文