2014-06-16 5 views
7

preventDefault가 작동하지 않는 이유는 무엇입니까? 아래 코드는 다음과 같습니다. . . Tks! 형태preventDefault()가 변경 이벤트에 대해 작동하지 않습니다

<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 

    $(document).ready(function() { 
     $("#text1").change(function(e) { 
      e.preventDefault(); 
     }); 
    }); 

function myFunc() { 
    alert("Random, annoying alert"); 
} 

</script> 
</head> 

그냥 하나 개의 HTML 요소 :

<body> 
<form name="test" method="post"> 
    <input name="text1" id="text1" type="text" onchange="myFunc();"> 
</form> 
</body> 
+2

아마도'$ ("# text1")' – blgt

+0

을 사용했을 것입니다. 예제에서 몇 가지 오류가 있었습니까? 실제로 방지 할 것으로 기대되는 기본값은 무엇입니까? –

+0

'임의의 성가신 알림'이 표시되지 않도록 하시겠습니까? myFunc()가 방지하려는 기본값이라고 가정합니까? –

답변

12

당신은 변경 이벤트에 preventDefault을 사용할 수 없습니다

$("#text1").change(function(e) { 
    alert(e.cancelable?"Is cancelable":"Not cancelable"); 
}); 

cancelable 재산은 방지 할 수있는 이벤트에 해당됩니다.

+0

많은 감사합니다. 때때로 그것은 가장 문제가되는 명백한 것입니다! – SlimJim

+4

그래서 어떻게 예방할 수 있습니까? – Triynko

0

preventDefault()가 요소의 기본 동작을 방지하기 위해 사용되는, 즉 기본 동작은 사용자의 브라우저에 구워진다.

예를 들어 클릭 할 때 앵커 태그의 동작은 URL 표시 줄을 수정하고 http 요청을 보내는 일련의 이벤트를 시작하는 것과 같습니다 (내가 알고있는 지나치게 단순한 설명).

Click 이벤트에서 evt.preventDefault(evt)을 사용하면 기본 동작을 중지 할 수 있으므로 동작을 수행하기 전에 다른 동작을 수행하거나 모두 함께 무시할 수 있습니다.

예에서 볼 수있는 문제는 기본 동작이 onchange인데 입력 상자를 선택 취소하고 강조 표시를 해제하고 해당 이벤트로 분류되어 있는지 확신 할 수 없습니다 (나는 그다지 확실하지 않습니다). 당신이 붙인 기능을 멈추게하기 위해서가 아니라 onchange(). 실제로 preventDefault()을 사용한다면 myFunc()은 정확하게 있어야합니다.

이벤트를 방지하려면 모양을 수정하는 것 이상의 결과가 출력되어야합니다. 예 : 태그의 클릭, 양식의 제출, 컨테이너의 스크롤. 그것을 취소 할 아니기 때문에