JQuery로 "onclick"을 제거하는 방법은 무엇입니까?


100

PHP 코드 :

<a id="a$id" onclick="check($id,1)" href="javascript:void(0)"  class="black">Qualify</a>

onclick="check($id,1)링크를 클릭 할 수 없거나 " check($id,1)해고 되지 않도록 제거하고 싶습니다 . JQuery로 어떻게 할 수 있습니까?

답변:


238

Old Way (1.7 이전) :

$("...").attr("onclick", "").unbind("click");

New Way (1.7+) :

$("...").prop("onclick", null).off("click");

(...을 필요한 선택기로 바꾸십시오.)


26
그것은 removeAttr ( 'onclick')이어야하지 않습니까?
Roatin Marth

네, 좋은 점은 더 깨끗할 수도 있지만 실행 관점과 다를지 모르겠습니다.
glmxndr 2009

6
jQuery를 함께 1.7+ 당신은 온 / 오프에 사용할 수 있습니다 stackoverflow.com/questions/209029/...
랜스 클리블랜드

6
첫째 removeAttr의에 대한 주석 참조 api.jquery.com/removeattr Removing an inline onclick event handler using .removeAttr() doesn't achieve the desired effect in Internet Explorer 6, 7, or 8. To avoid potential problems, use .prop() instead
andyface

2
@andyface 예, 문서에 있지만 .prop()IE11에도 사용해야 했습니다.
onetwo12 2014

58

나는 이것이 꽤 오래되었다는 것을 알고 있지만 길을 잃은 낯선 사람이 대답을 찾고있는이 질문을 발견하면 (내가 한 것처럼) removeAttr ()을 사용하는 대신 이것이 가장 좋은 방법입니다.

$element.prop("onclick", null);

jQuerys 공식 문서 인용 :

".removeAttr ()을 사용하여 인라인 onclick 이벤트 핸들러를 제거하면 Internet Explorer 6, 7 또는 8에서 원하는 효과를 얻을 수 없습니다. 잠재적 인 문제를 방지하려면 대신 .prop ()를 사용하십시오."


1
이렇게 입력했을 때 onlick 이벤트를 제거하는 가장 좋은 방법이라는 것을 알았습니다. <span onlick="method()">sometext>/span>이 행사는 완전히 unbinded하고 좋은 작품
zdarsky.peter

3
이것이 최선의 방법이라고 생각하지 않습니다. jsfiddle.net/TN2wrjsfiddle.net/TN2wr/1
Gus

1.6보다 오래된 JQ를 사용하고 있으므로 $ (element) .attr ( 'onclick', null); 나를 위해 작동합니다.
metamagikum

18

onclick속성 제거

다음과 같이 클릭 이벤트를 인라인으로 추가했다고 가정합니다.

<button id="myButton" onclick="alert('test')">Married</button>

그런 다음 다음과 같이 이벤트를 제거 할 수 있습니다.

$("#myButton").prop('onclick', null); // Removes 'onclick' property if found

click이벤트 리스너 제거

다음과 같이 이벤트 리스너를 정의하여 클릭 이벤트를 추가했다고 가정합니다.

$("button").on("click", function() { alert("clicked!"); });

... 또는 다음과 같이 :

$("button").click(function() { alert("clicked!"); });

그런 다음 다음과 같이 이벤트를 제거 할 수 있습니다.

$("#myButton").off('click');          // Removes other events if found

둘 다 제거

이벤트가 어떻게 추가되었는지 확실하지 않은 경우 다음과 같이 두 가지를 결합 할 수 있습니다.

$("#myButton").prop('onclick', null)  // Removes 'onclick' property if found
              .off('click');          // Removes other events if found


10

removeAttr을 사용하는 것은 매우 쉽습니다.

$(element).removeAttr("onclick");

5

bind, unbind, on, off, click, attr, removeAttr, prop으로 열심히 노력한 후 작동하도록 만들었습니다. 그래서 다음과 같은 시나리오가 있습니다. 내 html에서는 인라인 onclick 핸들러를 첨부하지 않았습니다.

그런 다음 Javascript에서 다음을 사용하여 인라인 onclick 핸들러를 추가했습니다.

$(element).attr('onclick','myFunction()');

나중에 Javascript에서 이것을 제거하기 위해 다음을 사용했습니다.

$(element).prop('onclick',null);

이것이 자바 스크립트에서 클릭 이벤트를 다이내믹하게 바인딩 및 바인딩 해제하는 작업입니다. 요소에 인라인 onclick 핸들러를 삽입하지 마십시오.


나는 이것을 좋아하는데 왜 하나는 소품이고 다른 하나는 속성일까요?
Stachu

확실하지 않지만 내가 보는 방식은 attr을 사용하여 해당 myFunction ()과 함께 onclick 처리기를 추가 / 주입하고 prop ( 'onclick', null)이 속성을 제거하므로 함수가 호출되지 않습니다. 이것이 나를 위해 일한 방식입니다. 그리고 요소에 attr을 통해 onclick 핸들러가 있고 prop 이후에 어떻게 제거되었는지 알 수 있습니다.
bboydflo

1
미래 참고로, 당신은 정말 사용되어야한다 .on('click', myFunction)(참고 myFunction입니다 하지 따옴표)를 한 후, 나중에,.off('click')
JDB은 여전히 모니카 기억

1

onclick 이벤트가 직접 요소에 있지 않고 상위 요소에서 나온다면 어떻게 될까요? 이것은 작동합니다.

$(".noclick").attr('onclick','').unbind('click');
$(".noclick").click(function(e){
    e.preventDefault();
    e.stopPropagation();
    return false;
});

다른 클릭 리스너를 추가하면 (기본값 등을 방지하기 위해) 리스너 목록 끝에 추가 될 수 있으므로 다른 리스너가 여전히 먼저 실행됩니다. 목록에 첫 번째 또는 마지막에 추가되었는지 확실하지 않습니다. 어쨌든 다른 답변에서 볼 수 있듯이 'off'를 사용하는 것이 좋습니다.
Frederic Leitenberger

0

ID로 onclick 이벤트의 바인딩을 해제하는 경우 이것을 시도한 다음 다음을 사용하십시오.

$('#youLinkID').attr('onclick','').unbind('click');

클래스별로 onclick 이벤트의 바인딩을 해제하면 이것을 시도한 다음 다음을 사용하십시오.

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