2012-08-25 7 views
3

나는 이것이 그만큼 어렵지 않아야한다고 확신합니다. 으로,반환 false 양식을 중단하지 않습니다

onsubmit="return FORMVALIDATE_add_rota_entry();" 

그리고 그것은 처음 두에 잘 작동 rota_date 및 rota_id :

function FORMVALIDATE_add_rota_entry() { 
    var rota_date = $("#rota_date").val(); 
    var rota_id = $("#rota_id").val(); 
    var am_pm = $("#am_pm").val(); 
    if(rota_date == "") 
    { 
     alert("Please enter a date."); 
     return false; 
    } 
    if(rota_id == "error") 
    { 
     alert("Please select a rota from the list."); 
     return false; 
    } 
    // check if that rota has already been entered for that date and am/pm 
    $.ajax({ 
     async:false, 
     type:"POST", 
     url:"/modules/rotas/check_rota_entry_existence", 
     data:{rota_date:rota_date, rota_id:rota_id, am_pm:am_pm}, 
     success: function(result) { 
      if(result != "0") 
      { 
       alert("This rota has already been added to this date, "+am_pm+"."); 
       return false; 
      } 
     } 
    }); 
} 

그것은 다음에 의해 양식 태그라고 : 나는 다음과 같은 기능 onsubmit를 실행하는 형태가 그들이해야 할 때 오는 경고와 그것이 제출에서 양식을 멈추지 만, 그것이 아약스 전화에있어, 괜찮아요, 옳은 결과를 반환, 경고해야하지만, 반환 거짓은 양식을 멈추지 않는 것 같습니다 제출에서. 내가 왜곡 당했기 때문에 누구나 아이디어가 있습니까?

감사합니다.

답변

1

좋아요, 그럼 절대 성공하지 않고 위의 솔루션을 시도한 후 내 자신을 왔어. 나는 완전히 양식 요소를 도랑에 빠지게하고 onclick을 다음과 같이 세 가지 값을 보내

onclick="FORMVALIDATE_add_rota_entry($('#rota_date').val(), $('#rota_id').val(), $('#am_pm').val());" 

그런 다음 함수가 다음과 같이되었다 :

function FORMVALIDATE_add_rota_entry(rota_date, rota_id, am_pm) { 
    // check if that rota has already been entered for that date and am/pm 
    $.ajax({ 
     type:"POST", 
     url:"/modules/rotas/check_rota_entry_existence", 
     data:{rota_date:rota_date, rota_id:rota_id, am_pm:am_pm}, 
     success: function(result) { 
      if(result != "0") 
      { 
       alert("This rota has already been added to this date, "+am_pm+"."); 
      } 
      else if(rota_date == "") 
      { 
       alert("Please enter a date."); 
      } 
      else if(rota_id == "error") 
      { 
       alert("Please select a rota from the list."); 
      } 
      else 
      { 
       $.post('/modules/rotas/add_rota_entry2', {rota_date:rota_date, rota_id:rota_id, am_pm:am_pm}); 
       parent.$.fn.colorbox.close(); 
      } 
     } 
    }); 
} 

모든 예상대로 작품입니다!모든 사람의 입력을위한

감사합니다 :) }

0

return 문 바로 앞에 event.preventDefault()을 사용해보세요.

+0

이벤트 인수조차 없으며'return false'가 이미 이것을 수행합니다. – Ryan

5

youre 잘못하고 있습니다. 당신이 그것을하고있는 방법은, 당신은 함수가 항상 false를 반환하도록해야 :

function FORMVALIDATE_add_rota_entry() { 
    var rota_date = $("#rota_date").val(); 
    var rota_id = $("#rota_id").val(); 
    var am_pm = $("#am_pm").val(); 
    if(rota_date == "") 
    { 
     alert("Please enter a date."); 
     return false; 
    } 
    if(rota_id == "error") 
    { 
     alert("Please select a rota from the list."); 
     return false; 
    } 
    // check if that rota has already been entered for that date and am/pm 
    $.ajax({ 
     async:false, 
     type:"POST", 
     url:"/modules/rotas/check_rota_entry_existence", 
     data:{rota_date:rota_date, rota_id:rota_id, am_pm:am_pm}, 
     success: function(result) { 
      if(result != "0") 
      { 
       alert("This rota has already been added to this date, "+am_pm+"."); 
       return false;//this is called when the server responds....which in your case isnt happening in the first place 

      } 
     } 
    }); 

    return false;//this should be at the end so 'false' is always returned to 'onsubmit' 
} 

return false;이 문이 실행 아약스 코드를 방지하는 역할을하는 경우 유일한 목적. 그러나 기능의 끝 부분에도 하나가 있어야합니다. 이것은 쉽게 수정 상점해야한다 :

onsubmit="FORMVALIDATE_add_rota_entry();return false;"

+0

예! 정답. 그러나,'e.preventDefault()'는'onsubmit' 속성에서 작동하지 않으므로, 그 부분을 꺼내고 싶을 수도 있습니다. – Ryan

+0

thanks for the headup –

+0

안녕하십니까, 답장을 보내 주셔서 감사합니다. 마지막 반환 값을 onsubmit이 아닌 함수에 추가했습니다.하지만 이제는 세 가지 검사가 모두 괜찮은 경우에도 양식 제출을 허용하지 않습니다. 어떤 아이디어? –

1

제거 :

$('#my-form').submit(FORMVALIDATE_add_rota_entry); 

변경 : (my-form 양식의 ID입니다) 함수의 추가 아래

onsubmit="return FORMVALIDATE_add_rota_entry();" 

:

function FORMVALIDATE_add_rota_entry() { 

function FORMVALIDATE_add_rota_entry(event) { 

그리고 당신의 기능 변화 :

에 아약스 요청이 내부 비동기 코드로

return false; 

event.preventDefault(); 

이 항상 양식 제출을 중단하지 않을 것이다 양식 처리를 중지 할 시간에 실행되지 않습니다.

+0

'async : false'를 추가 했는데도? –

+1

'async : false'는 정말 나쁜 생각입니다 ... – iambriansreed

+0

'onsubmit'으로 시간을 보내고 난 후에이 대답에 부딪 혔습니다. 나는 왜이 포럼에서 많은 사람들이 그것을 제안하지만, 왜 당신은'onsubmit '이 작동하지 않는지 궁금합니다. – NecipAllef

0

보다는

onsubmit="return FORMVALIDATE_add_rota_entry();" 

당신은 함수의 끝에서 return true;을 추가해야 할 수도 있습니다

onclick="return FORMVALIDATE_add_rota_entry();" 

사용해보십시오 사용.

관련 문제