2011-12-16 4 views
2

여기에이 간단한 코드가 있습니다. event.preventDefault not working

$("input#send").submit(function(event){ 
     event.preventDefault(); 
    $.ajax({ 
     type: 'POST', 
     url: add.php, 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 
}); 

는 Whever 나는 event.preventDefault 기능이 작동하지 않습니다는 "보내기"버튼을 클릭하고 페이지가로드됩니다.

왜 그런가?

답변

9

형태 제출 이벤트가 아닌 버튼이 있습니다. 또한 ID는 고유해야 tag#id#id 일 수 있습니다.

$("#theform").submit(function(event) { 
    event.preventDefault(); 
    // ... 
}); 
+0

감사합니다. 이전에 버튼의 클릭 기능을 사용 했는데도 그런 식으로 작동하지 않는 것 같습니까? 왜 그런가요? –

+0

@Peter Stuart : 정확히 무엇을 의미합니까?'submit' 버튼에'click'을 두는 것 역시 가능합니다 : http://jsfiddle.net/rKJJU/. – pimvdb

+2

@PeterStuart 필자는'add.php'에 따옴표를 넣지 않았기 때문에 생각합니다. 내 대답은 아래를 참조하십시오. 키보드를 통해'enter' 키를 사용하여 양식 제출을 호출 할 수 있기 때문에 @pimvdb가 양식 자체에 이벤트 처리기를 두는 것에 대한 조언에 동의합니다. – jessegavin

0

거짓 반환을 사용해보십시오 대신

$("input#send").submit(function(event) { 
    $.ajax({ 
     type: 'POST', 
     url: add.php, 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 
    return false; 
}); 
+2

차이를 두지 마십시오. –

+1

jQuery 이벤트 핸들러에서'return false'는'event.preventDefault();를 호출하는 것과 같습니다. event.stopPropagation(); ' – Jasper

+1

나는 그것을 시도했지만 아약스 때문에 작동하지 않았다. 아약스 코드 위에 올려 놓으면 효과가 있지만, 그렇지는 않습니다. 어쨌든 고마워요 :) –

2

나는 이벤트가 형태 요소 인 제출 믿습니다. 입력 [type = 'button']의 경우 click 이벤트를 사용할 수 있습니다.

7

당신은 폼의 submit 이벤트 또는 버튼의 click 이벤트에 바인딩 및 제출에서 양식을 중지하려면 event.preventDefault()를 호출해야합니다

$('form').bind('submit', function (event) { 
    event.preventDefault(); 
}); 

$('form').find(':submit').bind('click', function (event) { 
    event.preventDefault(); 
}); 
1
  1. 'add.php'
  2. 변경 따옴표를 추가 selector를 input#send이 포함 된 양식의 id 특성에 연결합니다.

형태보다는 입력에 click 핸들러에 submit() 핸들러 처리의 장점은 어떤 형태 (사용자가 양식 필드 중 하나에 초점을 맞춘 경우) ENTER 키를 누름으로써 전송 될 수 있다는 것이다. id 특성이 없으면 하나를 추가하거나 다른 jQuery 선택기를 사용하여 양식 태그를 대상으로 지정하십시오.

$("#myform").submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     type: 'POST', 
     url: 'add.php', 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 
    return false; 
}); 
0

preventDefault를 사용하는 경우 기본 제출 작업을 원하지 않는다고 가정합니다. 나는 단지 .submit 대신에 다른 이벤트를 사용할 것이다. 나에게 그것은 당신이 가로 채기를 바라는 제출 동작이 아니라, 보통 제출을 야기하는 클릭이다. return falseevent.stopPropagation() 모두 작동하지 않습니다

$('#inputSend').on('click', function(event) { 
    event.preventDefault(); 
    //the rest 
}); 
0

경우, 다음 방법을 시도해보십시오. .on()을 사용하면 제출 기능에 액세스 할 수있게됩니다. .submit().on("submit"..)으로 변경하면 return false 또는 e.stopPropagation()을 사용할 수 있습니다.

$(document).on("submit", "input#send", function(event) { 
    event.stopPropagation(); 
    $.ajax({ 
     type: 'POST', 
     url: add.php, 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 
    return false; });