하나의 선택기에 여러 이벤트 핸들러가있는 JQuery .on () 메소드


139

Jquery .on () 메소드를 여러 이벤트와 연관된 특정 선택기와 함께 사용하는 방법을 찾으려고합니다. 이전에는 .live () 메서드를 사용했지만 .on ()으로 동일한 기능을 수행하는 방법을 잘 모르겠습니다. 아래 코드를 참조하십시오 :

$("table.planning_grid td").live({
  mouseenter:function(){
     $(this).parent("tr").find("a.delete").show();
  },
  mouseleave:function(){
     $(this).parent("tr").find("a.delete").hide();        
  },
  click:function(){
    //do something else.
  }
});

다음을 호출하여 여러 이벤트를 할당 할 수 있다는 것을 알고 있습니다.

 $("table.planning_grid td").on({
    mouseenter:function(){  //see above
    },
    mouseleave:function(){ //see above
    }
    click:function(){ //etc
    }
  });

그러나 .on ()의 올바른 사용은 다음과 같습니다.

   $("table.planning_grid").on('mouseenter','td',function(){});

이것을 달성 할 수있는 방법이 있습니까? 아니면 여기서 가장 좋은 방법은 무엇입니까? 아래 코드를 시도했지만 주사위는 없습니다.

$("table.planning_grid").on('td',{
   mouseenter: function(){ /* event1 */ }, 
   mouseleave: function(){ /* event2 */ },
   click: function(){  /* event3 */ }
 });

미리 감사드립니다!

답변:


252

그것은 다른 방법 입니다. 당신은 작성해야합니다 :

$("table.planning_grid").on({
    mouseenter: function() {
        // Handle mouseenter...
    },
    mouseleave: function() {
        // Handle mouseleave...
    },
    click: function() {
        // Handle click...
    }
}, "td");

1
선택기가 왜 그렇지 $("table.planning_grid td")않습니까?
Muers

11
@ 무 어스, 그것은 또한 작동하고 질문자는 그렇게 인정하지만 , 실제로 각 올바른 요소 <table>대신에 이벤트를 묶어야한다고 믿습니다 <td>.
Frédéric Hamidi

37
<td>가 아니라 <table>에서 .on을 사용해야하는 좋은 이유가 있으며 나중에 <td>를 동적으로 추가하는 경우입니다. $ ( 'table td'). on ...은이 함수를 호출하는 순간 테이블에있는 <td>에만 영향을줍니다. $ ( 'table'). on (..., 'td', function ...)은 나중에이 테이블에 추가 할 <td>에 영향을줍니다.
Raanan

8
실제로 @Raanan은 물론 등록하는 모든 이벤트 핸들러에는 비용이 적지 만 비용이 많이 듭니다. 수천 개의 셀을 처리 할 때 유용한 성능을 얻으려면 요소 <table>당 하나의 핸들러 대신 단일 핸들러를 등록 <td>해야합니다.
프레데릭 하 미디

1
동의했다. '에'와 같은이 질문을 구글 매우 어려운 이러한 일반적인 단어이며 대부분의 결과는 관련이 있었다 .bind그리고 .live. 좋은 대답, 내가 찾던 것 : D @ Frédéric-귀하의 링크가 id더 이상 jquery 문서 페이지 의 헤더 에 연결되지 않습니다 . 아마도 업데이트 된 문서의 결과 일 것입니다. 그러나 해당 페이지에서이 답변을 찾을 수 없습니다.
nzifnab

186

또한 동일한 기능을 실행하는 동일한 선택기에 여러 개의 이벤트 핸들러가 첨부 된 경우

$('table.planning_grid').on('mouseenter mouseleave', function() {
    //JS Code
});

5
이것이 내가 찾던 것
RozzA

... 그리고 e.type으로 실제 발생 된 이벤트 유형을 얻습니다 (이벤트를 매개 변수로 추가 한 후 ... function (e) ...
William T. Mallard

24

다른 이벤트에서 동일한 기능을 사용하려면 다음 코드 블록을 사용할 수 있습니다

$('input').on('keyup blur focus', function () {
   //function block
})

11

나는 여기서 정말 유용하고 근본적인 것을 배웠다 .

체인 기능은 포함하는 대부분의 jQuery 기능 작동이 경우에 매우 유용합니다 너무 기능 출력.

대부분의 jQuery 함수 출력이 입력 객체 세트이므로 즉시 사용하고 더 짧고 똑똑하게 만들 수 있기 때문에 작동합니다.

function showPhotos() {
    $(this).find("span").slideToggle();
}

$(".photos")
    .on("mouseenter", "li", showPhotos)
    .on("mouseleave", "li", showPhotos);

7

다음과 같은 방식으로 동일한 이벤트 / 기능을 결합 할 수 있습니다.

$("table.planning_grid").on({
    mouseenter: function() {
        // Handle mouseenter...
    },
    mouseleave: function() {
        // Handle mouseleave...
    },
    'click blur paste' : function() {
        // Handle click...
    }
}, "input");

1

다음 코드로 시도하십시오.

$("textarea[id^='options_'],input[id^='options_']").on('keyup onmouseout keydown keypress blur change', 
  function() {

  }
);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.