거품

4769 단어
페이지에 여러 개의 이벤트가 있을 수도 있고, 여러 요소가 같은 이벤트에 응답할 수도 있습니다.만약에 웹 페이지에 두 개의 요소가 있는데 그 중 한 요소가 다른 요소에 끼워져 있고 모두 클릭 이벤트가 귀속되어 있으며 바디 요소에도 클릭 이벤트가 귀속되어 있다고 가정한다.
<div id="content">
	  div  
	<span>  span  </span>
	  div  
</div>

<script type="text/javascript">
$(function(){
	//  span    click  
	$('span').bind("click",function(){
		var txt = $('#msg').html() + "<p>  span     .<p/>";
		$('#msg').html(txt);
	});
	//  div    click  
	$('#content').bind("click",function(){
	    var txt = $('#msg').html() + "<p>  div     .<p/>";
		$('#msg').html(txt);
	});
	//  body    click  
	$("body").bind("click",function(){
		var txt = $('#msg').html() + "<p>body     .<p/>";
		$('#msg').html(txt);
	});
})
</script>

내부span원소, 즉span원소의 클릭 이벤트를 터치하면 3개의 기록을 출력합니다.내부 스핀 요소만 누르면 외부div 요소와 바디 요소에 연결된 클릭 이벤트를 터치합니다.이것은 사건의 거품으로 인해 일어난 것이다.스핀 요소를 누르는 동시에 스핀 요소를 포함하는 요소div와div 요소를 포함하는 요소body를 누르고 모든 요소는 특정한 순서에 따라 클릭 이벤트에 응답합니다.
요소의 클릭 이벤트는 다음 순서에 따라 거품이 발생합니다.

  • 거품이라고 하는 이유는 사건이 DOM의 차원 구조에 따라 수포처럼 끊임없이 위로 올라가기 때문이다.

    사건의 거품으로 인한 문제


    사건의 거품은 예상치 못한 효과를 일으킬 수 있다.상례에서, 원래는 요소의 클릭 이벤트만 촉발하려고 하였으나,
    요소와 요소의 클릭 이벤트도 동시에 촉발되었다.따라서 사건의 역할 범위를 제한할 필요가 있다. 요소를 눌렀을 때 요소의 클릭 이벤트만 터치하고
    요소와 요소의 클릭 이벤트는 터치하지 않습니다:
    요소를 눌렀을 때
    요소의 클릭 이벤트만 터치하고 요소의 클릭 이벤트는 터치하지 않습니다.
    이벤트 객체
    IE-DOM과 표준DOM은 이벤트 대상을 실현하는 방법이 각각 다르기 때문에 서로 다른 브라우저에서 이벤트 대상을 얻는 것이 비교적 어렵다.이 문제에 대해 JQuery는 필요한 확장과 봉인을 진행하여 모든 브라우저에서 이벤트 대상과 이벤트 대상의 일부 속성을 쉽게 얻을 수 있도록 한다.
    프로그램에서 이벤트 대상을 사용하는 것은 매우 간단합니다. 함수에 매개 변수를 추가하기만 하면 됩니다. jQuery 코드는 다음과 같습니다.
    $("element").bind("click",function(event){   
    	//event  :         
    	//...   
    });

    이렇게 하면 "요소"요소를 누르면 이벤트 대상이 생성됩니다.이 이벤트 대상은 이벤트 처리 함수만 접근할 수 있습니다.이벤트 처리 함수가 실행되면 이벤트 대상은 삭제됩니다.
    이벤트 거품 중지
    이벤트 거품을 정지하면 이벤트 중 다른 대상의 이벤트 처리 함수가 실행되는 것을 막을 수 있습니다.JQuery에서는 이벤트 거품을 중지하기 위해 stopPropagation() 방법을 제공합니다.
    $(function(){
       	//  span    click  
    	$('span').bind("click",function(event){
    		var txt = $('#msg').html() + "  span     ";
    		$('#msg').html(txt);
    		event.stopPropagation();    //        
    	});
    })

    요소를 눌렀을 때 요소의 클릭 이벤트만 터치하고
    요소와 요소의 클릭 이벤트는 터치하지 않습니다.같은 방법으로
    원소의 거품 문제를 해결할 수 있습니다.
    $('#content').bind("click",function(event){   
        var txt = $('#msg').html() + "<p>  div     .<p/>";   
        $('#msg').html(txt);   
        event.stopPropagation();    //           
    });

    이렇게 하면 요소나
    요소를 눌렀을 때 해당하는 내용만 출력하고 다른 내용은 출력하지 않습니다.
    기본 비헤이비어 차단
    웹 페이지의 요소는 자신의 기본 행동을 가지고 있습니다. 예를 들어 하이퍼링크를 누르면 이동하고, '제출' 단추를 누르면 폼이 제출되며, 때로는 요소의 기본 행동을 막아야 합니다.
    JQuery에서는 요소의 기본 동작을 막는 preventDefault () 방법을 제공합니다.
    예를 들어 프로젝트에서 자주 폼을 검증해야 한다.'제출'단추를 눌렀을 때 폼의 내용을 검증한다. 예를 들어 어떤 요소가 필수 필드인지, 어떤 요소의 길이가 6자리인지 등이다. 폼이 제출 조건에 부합되지 않을 때 폼의 제출을 막아야 한다(묵인 행위).
    <form action="test.html">
       :<input type="text" id="username" />
    <br/>
    <input type="submit" value="  " id="sub"/>
    </form>
    
    $(function(){
       $("#sub").bind("click",function(event){
             var username = $("#username").val();  //      
             if(username==""){     //       
    		     $("#msg").html("<p>         .</p>");  //    
    		     event.preventDefault();  //       (      )
    		 }
       })
    })

    사용자 이름이 비어 있을 때 '제출' 단추를 누르면 알림이 나타나고 폼을 제출할 수 없습니다.사용자 이름에 내용을 입력해야만 폼을 제출할 수 있습니다.preventDefault () 방법은 폼의 제출 행위를 막을 수 있음을 알 수 있습니다.
    이벤트 대상에 거품과 기본 행동을 동시에 멈추려면 이벤트 처리 함수에false를 되돌려줍니다.이것은 이벤트 대상에 stopPrapagation () 방법과 preventDefault () 방법을 동시에 호출하는 약자 방식입니다.
    표의 예에서 이벤트를 할 수 있습니다.preventDefault(); 덮어쓰기: return false;
    이벤트 거품 예시 중의 이벤트도 가능합니다.stopPropaqation(); 덮어쓰기: return false;
    이벤트 캡처
    사건 포획과 사건 거품은 정반대의 두 과정이고 사건 포획은 맨 끝에서 아래로 촉발된다.아니면 거품 사건의 예, 그 중 원소의 클릭 사건은 다음과 같은 순서에 따라 포획된다.

  • 사건 포획은 가장 바깥쪽 원소에서 시작해서 가장 안쪽 원소로 가는 것이 분명하다.따라서 귀속된 클릭 이벤트는 먼저 요소에 전달된 다음에
    요소에 전달되고 마지막에 요소에 전달됩니다.
    유감스럽게도 모든 주류 브라우저가 이벤트 포획을 지원하는 것은 아니며, 이 결함은 자바스크립트를 통해 복구할 수 없습니다.JQuery는 이벤트 캡처를 교부하지 않습니다. 만약 독자가 이벤트 캡처를 사용해야 한다면 원본 자바스크립트를 직접 사용하십시오.

    좋은 웹페이지 즐겨찾기