2012-10-23 2 views
1

왜 "return false;" 또는 "event.preDefualt();" $ .post(); 먼저 $.post('check-email.php',{parameter},function{data})을 통해 무언가를 호출 할 때 $(#id).submit(function(e){ return false;}// it works properly.But 다음에 false를 쓰고 그 $ .post 호출 이후에 false를 쓰려고 시도합니다. 작동하지 않고 직접 다음 페이지로 이동합니다. 여기 내 코드입니다 : -

$(document).ready(function() { //newly added 
    $('#mysignupform').submit(function (event) { 
     return false; 
     or event.preDfault(); // only work here 
     var emailVal = $('#inputEmail').val(); // assuming this is a input text field 
     //alert(emailVal); 
     $.post('check-email.php', { 
      'email': emailVal 
     }, function (data) { 
      alert(data); 
      if (data == 'false') { 
       $("#mysignupform").submit(function (event) { 
        return false; 
        or event.preventDefault(); //both doesnt work here..why?? 
        ; 
       }); 
      } else { 
       $("#mysingupform").submit(function() { 
        return false; 
       }); //retrun false doesnt work here..why?? 
      } 
     }); 
    }); 
}); 

나는 그들이 여전히 일어나고을 제출하지만 할 수 있도록 싶지 않다. 도와주세요 ..! 미리 감사드립니다.

+0

관련없는 태그는 사용하지 마십시오. PHP가 제거되었습니다. –

+3

3 번 입력 오타가 아닌지 모르겠지만'''event.preventDefault()''' – alexandernst

+0

데이터에 무엇이 들어가는가 –

답변

1

이 작동합니다 : 비동기

$(document).ready(function() { //newly added 
    $('#mysignupform').submit(function (event) { 
     // your $.post call 
     $.post('check-email.php', {email: emailVal}, function (data) { 
      // ... 
      // having a return false means returning false to the success callback 
      // of your .post call. it is not the same as returning false to the 
      // submit() callback 
     }); 

     // return false to submit() 
     return false; 
    }); 
}); 
1

$.post이기 때문에입니다. 실행은 즉시 $.post에 대한 호출에 이어지는 진술에서 계속됩니다. 다음에 성명이 없기 때문에 submit 이벤트 핸들러 함수는 단순히 undefined을 반환 할 것이고 브라우저는 아무 일도 일어나지 않은 것처럼 행복하게 계속 제출할 것입니다.

비동기 메서드에 대한 콜백은 나중에 만 실행됩니다. 귀하의 경우, 서버가 응답을 리턴합니다. 외부 함수가 이미 반환되었으므로 해당 콜백 함수가 으로 반환하는 데는 아무 것도 없습니다.

당신은 $.post 콜백 성공을 프로그래밍 방식으로 양식을 다시 제출 항상 다음 양식에 click 이벤트 핸들러의 기본 동작을 방지하기 버튼을 제출하고해야합니다

: 분명히

$('#mysignupform :submit').click(function (event) { 
    var form = this.closest("form"); // Get a reference to the containing form 
    event.preventDefault(); // Prevent the default action (form submission) 
    $.post('check-email.php', { /* data */ }, function (data) { 
     // If the data is good... 
     form.submit(); // Submit the containing form 
    }); 
}); 

할 수 있습니다 ' 폼 submit 이벤트에 바인딩하는 경우 폼을 다시 제출하면 이벤트 처리기가 다시 트리거되므로 무한 루프에 걸릴 수 있으므로 실제로이 작업을 수행하십시오.

0

$.post(...)입니다. 대신 $.ajax(async: false, ...)을 시도하십시오.

0

이것은 게시물이 완료된 후에 실행되는 함수가 비동기 적으로 실행되기 때문입니다. 즉, 더 이상 이벤트 처리기에 없습니다.

This answer에는 기본적으로 부울 플래그를 설정 한 후 제출 버튼을 다시 클릭하여 게시 논리가 두 번 실행되지 않도록 할 수 있습니다.

1

Ajax는 비동기로 작동합니다. 쉬운 솔루션은 제출 버튼에서 클릭 이벤트 핸들러를 바인딩하는 것입니다.

$('#your_submit_button').click(function (event) { 
    event.preventDefault(); 
    var emailVal = $('#inputEmail').val(); // assuming this is a input text field 
    $.post('check-email.php', { 
     'email': emailVal 
    }, function (data) { 
     if (data !== 'false') { 
      // submit the form here 
      $("#mysingupform").submit(); 
     } 
    }); 
}); 
관련 문제