複数の要素に対するjQueryの同じクリックイベント


435

ページ上の異なる要素に対して同じコードを実行する方法はありますか?

$('.class1').click(function() {
   some_function();
});

$('.class2').click(function() {
   some_function();
});

代わりに次のようなことをします:

$('.class1').$('.class2').click(function() {
   some_function();
});

ありがとう

回答:


866
$('.class1, .class2').on('click', some_function);

または:

$('.class1').add('.class2').on('click', some_function);

これは既存のオブジェクトでも機能します。

const $class1 = $('.class1');
const $class2 = $('.class2');
$class1.add($class2).on('click', some_function);

11
開発者がこれを思い出すのを助けるために、より多くの疑似クラスを使用してさらに拡張されたとしても、スタイルを定義するときにcssセレクターを適用するのと同じ形式です
Brett Weber

8
class2がこのvar class2 = $( "。class2")のようにキャッシュされた場合はどうなりますか?
Vivek S 2014

18
@NeverBackDown .add()はjqueryオブジェクトでも動作します
Eevee

2
これにより、セレクタの1つが未定義を返した場合でも、存在するjqueryオブジェクトにイベントがアタッチされます。
ベンスワーズ、2014

3
誰かが間に実質的な違いだか説明できる$('.class1, .class2')$('.class1').add('.class2')?どのような場合に使用する必要があります.add()か?
Taufik Nur Ra​​hmanda 2017年

108

通常はのon代わりに使用しますclick。特定の関数にイベントリスナーを追加できます。

$(document).on("click touchend", ".class1, .class2, .class3", function () {
     //do stuff
});

それが役に立てば幸い!


1
私はこの方法が好きです。しかし、同じ宣言でクラスごとに1つ、IDごとに1つの要素をターゲットにできますか?たとえば$(document).on( "click touchend"、 ".class1、#id1、.class3"、function(){// do stuff});
Gaurav Ojha 2017年

3
1年後:はい、できます!@GauravOjha
Obed Marquez Parlapiano 2017年

3
この手法(直接ハンドラーではなく委任ハンドラーを作成する)も、ハンドラーの登録後に作成された一致する要素によってトリガーされるイベントを処理するという独特の利点を提供します。参照:api.jquery.com/on
Jonathan Lidbeck '26 / 04/17

39
$('.class1, .class2').click(some_function);

$( '。class1、space here.class2')のようにスペースを入れてください。そうしないと機能しません。



10

もう1つの方法として、要素が変数として格納されていると想定します(関数本体で要素に複数回アクセスする場合は、多くの場合これが適切です)。

function disableMinHeight() {
    var $html = $("html");
    var $body = $("body");
    var $slideout = $("#slideout");

    $html.add($body).add($slideout).css("min-height", 0);
};

jQueryチェーンを利用して、参照を使用できるようにします。


4

要素を変数(jQueryオブジェクト)として保持する、または保持したい場合は、それらをループすることもできます。

var $class1 = $('.class1');
var $class2 = $('.class2');

$([$class1,$class2]).each(function() {
    $(this).on('click', function(e) {
        some_function();
    });
});

3

このようなクラスのコンマ区切りリストを追加します。

jQuery(document).ready(function($) {

$('.class, .id').click(function() { 

//  Your code

    }

});

2

以下のようにコーディングすることもできます。ここではぼかしイベントを使用しました。

$("#proprice, #proqty").blur(function(){
      var price=$("#proprice").val();
      var qty=$("#proqty").val();
      if(price != '' || qty != '')
      {
          $("#totalprice").val(qty*price);
      }
  });

1

同じイベントで処理する必要がある多くの入力フィールドを含むオブジェクトへのリンクがあります。そのため、find()を使用して、イベントを持つ必要のあるすべての内部オブジェクトを取得します

var form = $('<form></form>');
// ... apending several input fields

form.find('input').on('change', onInputChange);

オブジェクトがリンクの1つ下のレベルである場合は、children()の代わりにfind()メソッドを使用できます。


1

上記の優れた例と回答に加えて、クラスを使用して2つの異なる要素を「検索」することもできます。例えば:

<div class="parent">
<div class="child1">Hello</div>
<div class="child2">World</div>
</div>

<script>
var x = jQuery('.parent').find('.child1, .child2').text();
console.log(x);
</script>

これは「HelloWorld」を出力するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.