【问题标题】:jQuery event handler on multiple element variables多个元素变量上的 jQuery 事件处理程序
【发布时间】:2017-12-02 12:10:09
【问题描述】:

这样的事情可能吗? 我有多个变量设置为 DOM 元素。我不想再次点击 DOM 来设置事件处理程序,而是想使用我已经设置的变量。

var a = $("#foo");
var b = $("#bar");

a,b.on("click", function() {

});

【问题讨论】:

标签: javascript jquery


【解决方案1】:

您可以使用数组作为$() 的参数,它将创建一个包含其中所有内容的新集合。它不会再次命中 DOM。

$([a, b]).on("click", function() {
    ...
});

但是,它要求数组包含 DOM 元素,而不是 jQuery 对象。您可以使用 .get() 将 jQuery 集合转换为元素数组。由于您将获得嵌套数组,因此您可以使用.flat() 将其展平。对于 ID 选择器,这并不是真正需要的,因为您可以使用 .get(0) 选择第一个元素,但下面的方法可以推广到多个元素的集合。

var a = $('#foo');
var b = $('#bar');

$([a.get(), b.get()].flat()).on("click", function() {
    alert('Does this work?');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="foo"> Foo </button>
<button id="bar"> Bar </button>

【讨论】:

    【解决方案2】:

    解决方案 #1

    您可以使用.add() 链接缓存的元素。

    var a = $("#foo");
    var b  = $("#bar");
    
    (a).add(b).on("click", function() {
      alert('Handler registered');
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <button id="foo">Foo</button>
    <button id="bar">Bar</button>

    解决方案 #2

    当您处理多个缓存元素时,更优雅的解决方案是,正如 Barmar 所建议的,将它们作为数组传递给 $()

    但是,请注意只传入缓存的 jQuery 对象的 第一项,这样您实际上是针对 DOM 元素本身,而不是 jQuery 包装器对象。

    var a = $("#foo");
    var b = $("#bar");
    var c = $("#biz");
    
    
    $([a[0], b[0], c[0]]).on("click", function() {
      alert('Handler registered');
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <button id="foo">Foo</button>
    <button id="bar">Bar</button>
    <button id="biz">Biz</button>

    【讨论】:

      【解决方案3】:

      在 JQuery 中,您可以使用与 CSS 中相同的符号来影响多个元素,只需使用逗号分隔它们即可。

      $('#foo, #bar').on("click", function () {})
      

      【讨论】:

      • 这没有回答问题,这是关于使用元素的变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      相关资源
      最近更新 更多