링크 요소를 설정하고 jquery에서 클릭 이벤트를 호출했지만 클릭 이벤트가 두 번 호출됩니다. 아래 jquery 코드를 참조하십시오.
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
조언하십시오.
감사.
링크 요소를 설정하고 jquery에서 클릭 이벤트를 호출했지만 클릭 이벤트가 두 번 호출됩니다. 아래 jquery 코드를 참조하십시오.
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
조언하십시오.
감사.
답변:
HTML 페이지에 실수로 스크립트를 두 번 포함하지 않았는지 확인하고 확인하십시오.
클릭하기 전에 바인딩을 해제하십시오.
$("#link_button").unbind('click');
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
코드에 jquery 스크립트가 두 번 포함되었음을 의미합니다. 그러나 이것을 시도하십시오 :
$("#btn").unbind("click").click(function(){
//your code
});
나는 시도했다
e.stopImmediatePropagation(); 이것은 나를 위해 일하는 것 같습니다.
같은 문제가 있었지만이 코드를 변경해 볼 수 있습니다.
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
이에:
$("#link_button").button();
$("#link_button").unbind("click").click(function () {
$("#attachmentForm").slideToggle("fast");
});
저에게는이 코드가 문제를 해결했습니다. 그러나 HTML 페이지에 실수로 스크립트를 두 번 포함하지 않도록주의하십시오. 이 두 가지를 올바르게 수행하면 코드가 올바르게 작동 할 것이라고 생각합니다. 감사
이것을 시도하십시오
$('#ddlSupervisor').live('change', function (e) {
if (e.handled !== true) { //this makes event to fire only once
getEmployeesbySupervisor();
e.handled = true;
}
});
이것은 FireFox 인 동안 특히 버그입니다. 나는 위의 모든 답변을 많이 시도했고 마침내 많은 전문가들에 의해 버그로 잡혔습니다. 그래서 마침내 다음과 같은 변수를 선언하여이 아이디어를 생각해 냈습니다.
var called = false;
$("#ColorPalete li").click(function() {
if(!called)
{
called = true;
setTimeout(function(){ //<-----This can be an ajax request but keep in mind to set called=false when you get response or when the function has successfully executed.
alert('I am called');
called = false;
},3000);
}
});
이런 식으로 먼저 함수가 이전에 호출되었는지 여부를 확인합니다.
이것은 오래된 질문이지만 이벤트 위임을 사용하는 경우 이것이 원인입니다.
제거 후 .delegate-two두 번 실행이 중지되었습니다. 두 대리자가 같은 페이지에 있으면 이런 일이 발생한다고 생각합니다.
$('.delegate-one, .delegate-two').on('click', '.button', function() {
/* CODE */
});
제 경우에는 Chrome에서 잘 작동하고 IE는 .click()두 번 호출 했습니다. 그것이 귀하의 문제라면 .click()이벤트를 호출 한 후 false를 반환하여 수정했습니다.
$("#txtChat").keypress(function(event) {
if (event.which == 13) {
$('#btnChat').click();
$('#txtChat').val('');
return false;
}
});
전화로 unbind문제가 해결되었습니다.
$("#btn").unbind("click").click(function() {
// your code
});
이유는 모르겠지만이 문제가 발생했습니다.
$(document).on("click", ".my-element", function (e) { });
내가 그것을 바꿀 때
$(".my-element").click(function () { });
문제가 해결되었습니다. 그러나 확실히 내 코드에서 뭔가 잘못되었습니다.
나도 FF에서이 문제가 있었다. 그러나 내 태그는 태그에 바인딩되었습니다 <a>. 비록 <a>태그는 아무데도 안되었다 여전히 더블 클릭을했다. 대신 <a>태그를 태그로 바꾸었고 <span>더블 클릭 문제가 사라졌습니다.
또 다른 대안은 링크가 아무데도 가지 않는 경우 href 속성을 완전히 제거하는 것입니다.
이벤트가 두 번 또는 세 번 이상 전화하는 경우 도움이 될 수 있습니다.
이와 같은 것을 사용하여 이벤트를 트리거하는 경우…
$('.js-someclass').click();
… 그런 다음 .js-someclass페이지에있는 요소 의 수에주의를 기울이십시오 . 한 번이 아니라 모든 요소에 대해 클릭 이벤트를 트리거하기 때문입니다.
간단한 해결 방법 은 첫 번째 요소 만 선택하여 클릭을 한 번만 트리거하는 것입니다 . 예 :
$('.js-someclass:first').click();
스크립트의 다른 곳에서 "클릭"이벤트는 다른 여러 답변 / 댓글이 제안하는 것처럼 동일한 요소에 다시 바인딩됩니다.
비슷한 문제가 있었고이를 확인하기 위해 console.log다음 스 니펫과 같이 스크립트에 명령을 추가했습니다 .
$("#link_button")
.button()
.click(function () {
console.log("DEBUG: sliding toggle...");
$("#attachmentForm").slideToggle("fast");
});
버튼을 클릭 할 때 브라우저의 개발자 콘솔에서 아래 이미지와 유사한 내용이 표시되면 (내가했던 것처럼) click()이벤트가 동일한 버튼에 두 번 바인딩 된 것입니다.
빠른 패치가 필요한 경우 다른 해설자가 제안한 off방법 (btw unbind는 jQuery 3.0부터 더 이상 사용되지 않음)을 사용하여 이벤트를 바인딩 해제 (재) 바인딩하기 전에 제안한 솔루션 이 잘 작동 하며이 방법을 권장합니다.
$("#link_button")
.button()
.off("click")
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
불행히도 이것은 임시 패치 일뿐입니다! 상사를 행복하게 만드는 문제가 해결되면 코드를 좀 더 자세히 살펴보고 "중복 된 바인딩"문제를 해결해야합니다.
물론 실제 솔루션은 특정 사용 사례에 따라 다릅니다. 예를 들어 제 경우에는 "컨텍스트"라는 문제가있었습니다. 문서의 특정 부분에 적용된 Ajax 호출의 결과로 내 함수가 호출되었습니다. 전체 문서를 다시로드하면 실제로 "페이지"및 "요소"컨텍스트가 모두 다시로드되어 이벤트가 요소에 두 번 바인딩되었습니다. .
이 문제에 대한 나의 해결책은 jQuery를 활용하는 것이었다 하나 와 동일한 기능 에 이벤트가 첫 번째 호출 후 자동으로 결합되지 않은 것을 제외한다. 그것은 내 사용 사례에 이상적이지만 다시 다른 사용 사례의 솔루션이 아닐 수도 있습니다.