如何使用 jQuery 将函数绑定到所有输入元素?

发布于 2024-08-26 13:12:45 字数 601 浏览 8 评论 0原文

假设我有这套 HTML 标记和 CSS

#CSS

.inputhelp_text { background: #000; color: #fff; }
.nodisplay { display: none; }

<input class="inputhelp" id="firstname" /><span class="inputhelp_text nodisplay" id="help_firstname">Write in your firstname</span>

<input class="inputhelp" id="lastname" /><span class="inputhelp_text nodisplay" id="help_lastname">Write in your lastname</span>

使用 jQuery,我需要将一个函数绑定到所有输入字段(我猜使用 jQuery 的 EACH 函数),这样当我单击输入字段时,它应该切换每个范围的类仅“inputhelp_text”。我已经让它在每个领域的两个单独的函数中工作,但由于我有很多领域,我知道有更好的方法来解决它。

有什么建议吗?

let's say I have this set of HTML-markup and CSS

#CSS

.inputhelp_text { background: #000; color: #fff; }
.nodisplay { display: none; }

<input class="inputhelp" id="firstname" /><span class="inputhelp_text nodisplay" id="help_firstname">Write in your firstname</span>

<input class="inputhelp" id="lastname" /><span class="inputhelp_text nodisplay" id="help_lastname">Write in your lastname</span>

Using jQuery, I need to bind a function to all input fields (I guess using jQuery's EACH function) so that when I click the input field, it should switch the class of each span to only "inputhelp_text". I've gotten this to work in two separate functions for each field, but since I have alot of fields, I know there's a better way to solve it.

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

您想要将处理程序绑定到 blur()focus() 事件:

$(".inputhelp").focus(function() {
  $("span.inputhelp_text:visible").addClass("nodisplay");
  $(this).next("span.inputhelp_text").removeClass("nodisplay");
}).blur(function() {
  $("span.inputhelp_text").addClass("nodisplay");
});

通常我建议使用 jQuery 效果,例如 hide()show() 但这些仅适用于块级元素。 是内联的,所以这不起作用。

You want to bind handlers to the blur() and focus() events:

$(".inputhelp").focus(function() {
  $("span.inputhelp_text:visible").addClass("nodisplay");
  $(this).next("span.inputhelp_text").removeClass("nodisplay");
}).blur(function() {
  $("span.inputhelp_text").addClass("nodisplay");
});

Normally I'd recommend using jQuery effects like hide() and show() but these only really work with block level elements. <span> are inline so this won't work.

胡渣熟男 2024-09-02 13:12:45

您可以使用每个函数:

$("input").each(function() {
  // this points to the input DOM element
  // $(this) is the jQuery wrapped element
});

例如,您可以

$(this).removeClass("inputhelp");
$(this).addClass("inputhelp_text");

在回调中使用:。

You can use the each function:

$("input").each(function() {
  // this points to the input DOM element
  // $(this) is the jQuery wrapped element
});

For example you could have:

$(this).removeClass("inputhelp");
$(this).addClass("inputhelp_text");

inside the callback.

一念一轮回 2024-09-02 13:12:45

在这种情况下我所做的如下。假设您想要以某种方式绑定一组 $("input"),例如您想要添加一个 .invalid 类code> 当它们为空时:

$("input").each(function () {
      var $this = $(this);
      $this.focus(function (e) {
        $this.removeClass("invalid");
      });

      $this.blur(function (e) {
        if ($this.val() == "") {
          $this.addClass("invalid");
        }
      });
    });

通过存储对从 $.fn.each 返回的 $(this) 的引用,您现在可以单独绑定到每个元素上的事件。

What I do in this situation is the following. Let us say that you have a set of $("input")'s that you want to bind to in some way, for example you want to add a class of .invalid when they are empty:

$("input").each(function () {
      var $this = $(this);
      $this.focus(function (e) {
        $this.removeClass("invalid");
      });

      $this.blur(function (e) {
        if ($this.val() == "") {
          $this.addClass("invalid");
        }
      });
    });

By storing a reference to $(this) returned from $.fn.each, you can now bind to events on each of the elements individually.

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