2014-12-12 8 views
1

특정 입력에 대해 keyup을위한 eventListener를 설정 중입니다. 그런 다음 코드의 뒷부분에서 첫 번째 이벤트를 재정의하지 않고 해당 수신기에 다른 이벤트를 추가 할 수 있어야합니다 (두 함수 모두 실행해야 함). 이것을 달성 할 수 있습니까?오버라이드 (override)하지 않고 이벤트 리스너 추가하기

$input.keyup(function...) 

$input.bind('keyup',function(){...}); 

$input.addEventListener('keyup',function(){...}); 

내가 어떤 작업을 얻을 수 없었다 :

은 내가 시도했습니다.

+4

없음 이전 핸들러를 바인딩하지 덮어 씁니다. 문제를 보여주는 데모를 제작할 수 있습니까? – Mathletics

+2

'$ input'이란 무엇입니까? jQuery 이벤트 핸들러는 명시 적으로 모든 이벤트 전달을 취소하지 않는 한 다른 핸들러를 "대체"하지 않습니다. – Pointy

답변

2

당신은 on로 청취자를 Namespace 수 있습니다

$input.on('keyup.one', function() {}) 
$input.on('keyup.two', function() {}) 

이것은 첫 번째 수신기를 제거하지 않고 $input.off('keyup.two')를 호출 할 수 있습니다.

+0

와우, 네임 스페이스 이벤트에 대해 알지 못했습니다! 그것은 흥미로운 정보입니다! –

+0

^같은. 문제는, 이벤트 중 하나가 내가 작성한 모든 페이지에서 사용할 수 있어야하는 방법 때문입니다. 다른 개발자가 내 기능을 사용하고 있다면 다른 키 업 이벤트의 네임 스페이스를 기억하지 않아도됩니다. 이 문제를 해결할 방법이 있습니까? –

+0

@ JarrydGoodman 정확한 문제가 무엇인지에 대해 더 많은 정보를 제공해야한다고 생각합니다. 수학에 따르면 문제없이 이벤트에 두 개의 처리기를 추가 할 수 있어야합니다. 네임 스페이스는 단순히 _your_ 이벤트를 추가하고 제거 할 수있는 설탕입니다. –

1

stopImmediatePropagation이 호출되지 않으면 이벤트 처리기를 추가해도 이전에 추가 된 이벤트 처리기가 제거되지 않습니다.

다음은 예입니다. 버튼을 클릭하면 두 이벤트 핸들러가 모두 실행됩니다. 이러한 옵션의

var $p = $('p'); 
 
$('button').click(function() { 
 
    $p.html($p.html() + ' *event handler 1* '); 
 
}) 
 

 
$('button').click(function() { 
 
    $p.html($p.html() + ' *event handler 2* '); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button>click me</button> 
 
<p></p>