2012-03-14 6 views
6

여기서 내가 무엇을 놓치고 있습니까?"on"preventDefault

참고 : jQuery를 모바일

DEMO using preventDefault

  • DEMO using return false

  • 난 그냥 링크없이 스크립트를 가진 것처럼 내가로 preventDefault에게 페이지가로드를 사용하는 경우

    • 을 사용할 때 나는 false를 반환하기 위해 바꾼다. (나는 평범한 JS onclick 이벤트 핸들러에서 항상 사용했다.) 예상대로 작동한다. 나는 이미 다른 게시물을 검토했으며 모두 .click을 사용하고 있으며 모두 preventDefault를 제안합니다.

      $(document).ready(function() { 
          $("#leftdiv a").on("click",function(e) { 
          $("#rightDiv").load(this.href); 
          return false; // I was sure preventDefault would work 
          }); 
      }); 
      

      HTML

      <div id="leftdiv" style="position:absolute;padding-right:5%; overflow:scroll;"> 
      <a href="page1.htm">Launch page 1</a><br /> 
      <a href="page2.htm">Launch page 2</a> 
      </div> 
      
      <div id="rightDiv" style="padding-left:30%"></div> 
      
    +1

    의 문제입니다. 다른 모든 것보다 먼저 'e.preventDefault()'를 사용해보십시오. – Joseph

    +0

    @Joseph 대개 마지막에 위치해야합니다. 실행될 코드의 마지막 부분입니다. preventDefault 호출을 두는 위치에 의존하지 않습니다. –

    +0

    _ "예상대로 작동합니다."_ -이 경우 "예상대로"의미하는 점에 대해 조금 더 명확히 할 수 있습니까? 원하는 행동은 무엇입니까? 그리고 작동하지 않는 정확한 코드를 보여줄 수 있습니까? – nnnnnn

    답변

    15
    e.preventDefault(); 
    

    작동하지 않았다? 상단이나 코드의 끝 부분에 e.preventDefault(); 퍼팅

    $('a').on("click",function(e){ 
        //do something 
        e.preventDefault(); 
    }); 
    

  • http://api.jquery.com/event.preventDefault/
    • 는 문제가되지 정상적으로 않습니다. 또한 e.stop() 방법이 있습니다. 그렇다면 return false;을 사용하면 어떨까요? jQuery를 모바일 문서에서

      : 요소의 기본 클릭 동작을 취소 할 수는 Vclick 이벤트에()로 preventDefault를 호출 할 수있는 요소를 기본 클릭 동작을

      응용 프로그램을 취소

      . 마우스 기반 장치의 경우 vclick 이벤트에서 preventDefault()를 호출하면 버블 이벤트 단계에서 실제 클릭 이벤트에서 preventDefault() 을 호출하는 것과 동일합니다. 터치 기반의 기기에서는 vclick 이벤트가 전달 된 후 실제 클릭 이벤트가 에 약 300ms가 전달되기 때문에 좀 더 복잡합니다. touch 장치의 경우 vclick 이벤트에서 preventDefault()를 호출하면 캡처 이벤트 단계에서 이 브라우저에서 디스패치하는 다음 클릭 이벤트를 catch하려고 시도하는 vmouse 플러그인의 일부 코드 이 트리거되고 preventDefault() 및 이 호출됩니다. 그것에 대한 stopPropagation(). 위의 경고에서 에서 언급했듯이 터치 이벤트 을 해당 마우스 이벤트와 일치시키는 것이 어려울 수 있습니다. 대상이 다를 수 있기 때문입니다. 의 경우 vmouse 플러그인도 좌표로 해당 클릭 이벤트를 식별하려고합니다. 대상 및 좌표 식별이 모두 실패하는 경우가 있습니다. 은 click 이벤트가 전달되고 요소의 기본 동작을 트리거하거나 콘텐츠가 이동되거나 대체 된 경우 클릭을 트리거합니다 다른 요소. 이 특정 요소/컨트롤에 대해 정기적으로 발생하는 경우 은 조치를 트리거하는 데 클릭을 사용하는 것이 좋습니다.

      function() { 
          return false; 
      } 
      
      // IS EQUAL TO 
      
      function(e) { 
          e.preventDefault(); 
          e.stopPropagation(); 
      } 
      

      출처 :http://css-tricks.com/return-false-and-prevent-default/

      또한 document.ready가

      지원되지 않는 .on() ISN도 지원 보인다

      자료 :http://jquerymobile.com/test/docs/api/events.html

    +0

    @mplungjan 답변을 수정했습니다. 그 주위에 실제적인 방법이없는 것처럼 보입니다 –

    +0

    내 업데이트를 보시기 바랍니다 – mplungjan

    +0

    알았어,하지만 왜 돌아 오지 않는거야? 작동 할 때? –

    1

    이것은을 제공 할 수 있습니다 해결책을 설명하는 정보가 부족합니다. . 는 최근로 preventDefault 비슷한 코드에서 작동하지 않는 문제를 가로 질러 와서 문제는 다음을 시도 $(document) vs $('body')에서 위임에있다 :

    이 jQuery를 3.2.1 그러나 발생하지 않습니다
    <a href="http://stackoverflow.com" id="test1">Test 1</a> 
    <a href="http://stackoverflow.com" id="test2">Test 2</a> 
    <script> 
        $('body').on('click', '#test1', function(e) { 
         e.preventDefault(); 
         alert('hi 1'); 
        }); 
    
        $(document).on('click', '#test2', function(e) { 
         e.preventDefault(); 
         alert('hi 2'); 
        }); 
    </script> 
    

    , 난 단지 확인하실 수 있습니다 이것은 일반적으로 끝에 놓이는`return false`와는 달리 2.1.7

    +1

    이유를 설명 할 수 없을 때 어떻게 대답합니까? –