답변:
차이는 사용 패턴에 있다고 생각합니다.
내가 선호하는 것 .on
이상의 .click
전자가 있기 때문에 수 동적으로 추가 요소에 대해 적은 메모리와 작업을 사용합니다.
다음 html을 고려하십시오.
<html>
<button id="add">Add new</button>
<div id="container">
<button class="alert">alert!</button>
</div>
</html>
우리는 통해 새로운 버튼을 추가
$("button#add").click(function() {
var html = "<button class='alert'>Alert!</button>";
$("button.alert:last").parent().append(html);
});
"경고!"를 원합니다 경고를 표시합니다. "click"또는 "on"을 사용할 수 있습니다.
click
$("button.alert").click(function() {
alert(1);
});
위와 같이 선택기와 일치하는 모든 단일 요소에 대해 별도의 핸들러가 작성됩니다 . 그 의미는
.on
$("div#container").on('click', 'button.alert', function() {
alert(1);
});
위와 같이 동적으로 생성 된 것을 포함하여 선택기와 일치 하는 모든 요소에 대한 단일 처리기 .
.on
Adrien이 아래에서 언급했듯이 사용하는 또 다른 이유 .on
는 네임 스페이스 이벤트입니다.
처리기를 추가 .on("click", handler)
하면 일반적으로 처리기를 제거하면 .off("click", handler)
처리기가 제거됩니다. 분명히 이것은 함수에 대한 참조가있는 경우에만 작동하므로 그렇지 않으면 어떻게됩니까? 네임 스페이스를 사용합니다.
$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });
바인딩을 통해
$("#element").off("click.someNamespace");
on('click' ...)
참조 그리고 동시에, 내가 사용하는 것 중 하나만 바인딩 해제 할 수 있습니다on('click.darkenallothersections' ...)
on('click.displaynextstep' ...)
.unbind('click.displaynextstep')
on()
jQuery의 트렌드입니다. jQuery 3으로 업그레이드 $(window).load(function() {});
할 $(window).on("load", function (e) {})
때 업데이트해야했습니다.
다음 코드간에 차이점이 있습니까?
아니오, 귀하의 질문에있는 두 코드 샘플 사이에는 기능상의 차이가 없습니다. .click(fn)
의 "바로 가기 방법"입니다 .on("click", fn)
. 에서 의 문서.on()
:
.click()
이벤트 핸들러를 첨부하거나 트리거하는 데 사용할 수있는 일부 이벤트에는 약식 메소드 가 있습니다. 속기 방법의 전체 목록은 events 카테고리를 참조하십시오 .
참고 것이 .on()
다릅니다 .click()
가 만들 수있는 능력이 있다는 점에서 위임 된 이벤트 핸들러를 통과하여 selector
반면, 매개 변수는 .click()
하지 않습니다. 때 .on()
없이 호출 selector
매개 변수, 그것과 완전히 동일하게 동작합니다 .click()
. 이벤트 위임을 원하면을 사용하십시오 .on()
.
.on()
jQuery 1.7부터 모든 이벤트 바인딩을 수행하는 데 권장되는 방법입니다. 다른 매개 변수를 전달할 때 동작을 변경하는 두 가지 기능 .bind()
과 .live()
하나 의 기능으로 모두 롤링 됩니다.
당신의 예를 썼을 때, 둘 사이에는 차이가 없습니다. 둘 다 핸들러를의 click
이벤트에 바인딩합니다 #whatever
. 원하는 경우 on()
하위에서 발생한 이벤트 #whatever
를 단일 핸들러 함수 에 위임 할 수있는 유연성을 제공 합니다.
// Bind to all links inside #whatever, even new ones created later.
$('#whatever').on('click', 'a', function() { ... });
.live()
입니까? 또한 이것은 다른 기능과는 모순되는 것처럼 보이며,의 기능 만 가지고 .click()
있으므로 향후 이벤트에는 적용되지 않습니다.
.on()
일을 할 수있는 .click()
수행 과 일을 .bind()
하고 .live()
할 - 그것은 당신이 그것을 호출 어떤 매개 변수 따라 달라집니다. (일부 다른 답변도이 문제를 언급했다.) 그 생각 참고 "바인딩을 #whatever 내부의 모든 링크"입니다 하지 어떻게 .live()
하지, 그것은 무엇 .delegate()
않습니다. 컨테이너를 지정하지 않고 .live()
모든 내부에 바인딩합니다 document
. 참고 또한 .live()
이후 jQuery를 1.7에서 사용되지 않습니다.
다른 답변에서 언급했듯이 :
$("#whatever").click(function(){ });
// is just a shortcut for
$("#whatever").on("click", function(){ })
그럼에도 불구하고 이벤트 위임을 처리 할 수 있지 않은 .on()
여러 가지 다른 매개 변수 조합 을 지원합니다 .click()
(superceding .delegate()
및 .live()
).
(그리고 분명히 "키업", "포커스"등에 대한 다른 유사한 단축키 방법이 있습니다.)
추가 답변을 게시하는 이유는 .click()
매개 변수없이 호출하면 어떻게되는지 언급하는 것입니다 .
$("#whatever").click();
// is a shortcut for
$("#whatever").trigger("click");
.trigger()
직접 사용하는 경우 추가 매개 변수 또는 jQuery 이벤트 객체를 전달할 수 있습니다 .click()
.
나는 또한 당신이 (JQuery와-1.7.1.js 단위)의 jQuery 소스 코드를 보면 당신이 내부적으로 볼 수 있음을 언급하고 싶었다 .click()
(또는 .keyup()
, 등) 함수가 실제로 호출 .on()
또는 .trigger()
. 분명히 이것은 그들이 실제로 동일한 결과를 가지고 있음을 확신 할 수 있지만, 사용하는 것이 .click()
약간 더 많은 오버 헤드 를 가지고 있음을 의미합니다 . 대부분의 상황에서 걱정하거나 생각할 것이 아니라 이론적으로는 특별한 상황에서 중요 할 수 있습니다.
편집 : 마지막으로 .on()
여러 이벤트를 한 줄에서 동일한 함수에 바인딩 할 수 있습니다.
$("#whatever").on("click keypress focus", function(){});
.click()
.)
그들은 같은 것으로 보인다 ... click () 함수의 문서 :
이 메소드는 .bind ( 'click', handler)의 단축키입니다.
on () 함수 의 문서 :
jQuery 1.7부터 .on () 메소드는 이벤트 핸들러를 첨부하는 데 필요한 모든 기능을 제공합니다. 이전 jQuery 이벤트 메소드에서 변환하는 데 도움이 필요하면 .bind (), .delegate () 및 .live ()를 참조하십시오. .on ()으로 바인드 된 이벤트를 제거하려면 .off ()를 참조하십시오.
.click
대.on
다음은 클릭 이벤트를 적용하는 다양한 방법 목록입니다. 적절하게 선택 가능하거나 클릭이 작동하지 않는 경우 대안 중 하나를 시도하십시오.
$('.clickHere').click(function(){
// this is flat click. this event will be attatched
//to element if element is available in
//dom at the time when JS loaded.
// do your stuff
});
$('.clickHere').on('click', function(){
// same as first one
// do your stuff
})
$(document).on('click', '.clickHere', function(){
// this is diffrent type
// of click. The click will be registered on document when JS
// loaded and will delegate to the '.clickHere ' element. This is
// called event delegation
// do your stuff
});
$('body').on('click', '.clickHere', function(){
// This is same as 3rd
// point. Here we used body instead of document/
// do your stuff
});
$('.clickHere').off().on('click', function(){ //
// deregister event listener if any and register the event again. This
// prevents the duplicate event resistration on same element.
// do your stuff
})
$('.UPDATE').click(function(){ }); **V/S**
$(document).on('click','.UPDATE',function(){ });
$(document).on('click','.UPDATE',function(){ });
$(document).on('click','.UPDATE',function(){ });
은 jquery를 사용하여 동일한 페치 된 데이터처럼 효과적으로 작동합니다. 업데이트 또는 삭제시 버튼이 작동하지 않는 경우 :