>  기사  >  웹 프론트엔드  >  실행되는 jquery 트리거 함수에 대한 솔루션

실행되는 jquery 트리거 함수에 대한 솔루션

WBOY
WBOY원래의
2016-05-16 15:13:061943검색

이 기사의 예에서는 jquery 트리거 함수를 두 번 실행하는 문제에 대한 해결 방법을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

1. 질문은 다음과 같습니다.

에는 다음 코드가 있습니다.

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
*{margin:0;padding:0;}    
body { font-size: 13px; line-height: 130%; padding: 60px; }
p {width:200px;background:#888;color:white;height:16px;}
</style>
<script src="jquery-1.6.4.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
  $('#old').bind("click", function(){
        $("input").trigger("focus");
    });
    $('#new').bind("click", function(){
      $("input").triggerHandler("focus");
    });
    $("input").focus(function(){
  $("body").append("<p>focus.</p>");
})
});
</script>
</head>
<body>
<button id="old">trigger</button>
<button id="new">triggerHandler</button>
<input />
</body>
</html>

여기에 있는 기능:

$('#old').bind("click", function(){
$("input").trigger("focus");
});

Firefox에서는 한 번만 실행됩니다. 즉, 포커스가 출력됩니다.

그러나 이는 두 번 트리거됩니다. 즉, 두 개의 초점이 동시에 출력됩니다.

2. 해결책:

먼저 트리거와 TriggerHandler를 분석합니다. TriggerHandler를 사용하면 브라우저의 기본 이벤트가 트리거되지 않으며 이벤트 버블링도 발생하지 않습니다(다른 차이점은 jQuery 문서 참조). 이 버그에 대한 티켓입니다. 이 문제에 전념하십시오. jQuery 자체는 브라우저 간의 차이점을 해결하기 위해 이벤트 개체를 구현합니다. 그러나 mouseenter/mouseleave와 같은 비표준 이벤트가 존재하기 때문에 jQuery는 네이티브 이벤트가 시뮬레이션된 이벤트의 이벤트 큐로 돌아갈 수 있도록 하는 특수 이벤트 하위 시스템을 도입했습니다. 그러나 이 시스템은 트리거를 사용할 때 모든 문제를 해결할 수 없습니다. .focus, IE에서는 콜백이 두 번 잘못 실행됩니다.

triggerHandler는 트리거와 관련된 이 문제에 대한 솔루션입니다. 그러나 TriggerHandler를 사용하면 입력에 커서 포커스 효과가 없다는 것을 알 수 있습니다.

초기 해결 방법:

triggerHandler를 사용하는 것 외에 또 다른 방법은 포커스 바인딩 이벤트에

을 추가하는 것입니다.
event.preventDefault()

그러나 포커스 이벤트 콜백이 실행되지만 포커스 효과가 없기 때문에 이것이 우리의 기대에 미치지 못한다는 것을 알게 됩니다.

최종 해결 방법:

jQuery로 캡슐화되어 있으므로 네이티브 이벤트만 사용할 수 있습니다. 데모를 보면 왼쪽은 네이티브 이벤트에 의해 트리거되고 오른쪽은 TriggerHandler를 사용합니다.

$('input')[0].focus();

더 많은 jQuery 관련 콘텐츠에 관심이 있는 독자는 이 사이트에서 "JQuery 드래그 효과 및 기술 요약", "jQuery 확장 기술 요약"과 같은 특별 주제를 확인할 수 있습니다. , "JQuery 일반 클래식 특수 효과 요약", "jQuery 애니메이션 및 특수 효과 사용 요약", "jquery 선택기 사용 요약" 및 "jQuery 공통 플러그인 및 사용법 요약

이 기사가 jQuery 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.