2013-08-27 2 views
3

메인 스크립트에서 jQuery Mobile 플러그인 충돌에 대해 도움을 요청하고 싶습니다. 나는 jQuery Mobile을 사용하는 구입 한 템플릿이있는 모바일 버전 인 웹 사이트의 또 다른 버전을 만들려고합니다. 여전히이 사이트는 웹 버전 기반의 CodeIgniter 프레임 워크에 있습니다.jQuery Mobile이 e.PreventDefault를 듣지 않습니다.

내 주요 스크립트에서 유효성 검사 오류를 표시하기 위해 모든 양식 제출에 preventDefault() 함수가 있습니다. 그런 다음 구입 한 모바일 템플릿으로 작업중인 사이트를 마이그레이션 할 때 preventDefault()를 수신하지 않는 것으로 보입니다. 양식을 제출할 때마다 유효성 검사 오류가 표시되지만 읽으려면 초 후에 페이지가 변경됩니다. 사이트를 새로 고칩니다.

내 스크립트는 아래 코드와 유사합니다. 이것은 내 웹 버전에서 작동합니다. >>>

$('form#frm-signup-updates').submit(function(e){ 

    e.preventDefault(); 

    $.post(base_url+'home/subscribe', $('#frm-signup-updates').serialize(), function(data){ 

     if(data == 'success'){ 
      loadpopup(); 
     } 
     else{ 
      var json = $.parseJSON(data); 
      $("span.error-notif#name").append(json.name); 
      $("span.error-notif#email").append(json.email); 
     } 

    }); 
}); 
+1

'event.preventDefault()'는 jQuery의 자바 스크립트 언어의 일부로 제한되지 않습니다. – Class

+0

@Class, 사실입니다. [jQuery에는 자체 event.preventDefault() 메소드가 있습니다 (http://api.jquery.com/event.preventDefault/). – Sparky

답변

5

submit을 차단 return false을보십시오.

$('form#frm-signup-updates').submit(function(e){ 

    $.post(base_url+'home/subscribe', $('#frm-signup-updates').serialize(), function(data){ 

     if(data == 'success'){ 
      loadpopup(); 
     } 
     else{ 
      var json = $.parseJSON(data); 
      $("span.error-notif#name").append(json.name); 
      $("span.error-notif#email").append(json.email); 
     } 

    }); 
    return false; 
}); 

는 UPDATE : 글쎄, 난 jQuery를 모바일의 소스 코드를 확인하고 JQM 양식 방지 기본적으로 제출하고 아약스 취급 것을 발견했다. submit$.mobile.changePage하지 브라우저에 의해 수행되므로

 //bind to form submit events, handle with Ajax 
     $.mobile.document.delegate("form", "submit", function(event) { 
      var formData = getAjaxFormData($(this)); 

      if (formData) { 
       $.mobile.changePage(formData.url, formData.options); 
       event.preventDefault(); 
      } 
     }); 

preventDefault이 잘못되었습니다.

1. 추가 '데이터 아약스 = false를이'form 요소

demo1

에 속성 : 싶어 submit을 방지하는 경우

그래서, 그게 내가이 개 제안을, $.mobile.changePage입니다 2. 제출 버튼을 클릭 할 때 아약스를 수행

demo2

+1

['return false;와'e.preventDefault();'의 차이점 (http://css-tricks.com/return-false-and-prevent-default/) – Class

+0

@Fly_pig 고마워! 나는 잘못했다고 생각한 적이 없다 .Default()의 오용. 어쩌면 웹 버전에서 preventDefault()를 사용하는 데 문제가 없으므로 그 차이점을 이해하지 못했을 것입니다. – user2567536

+0

@ user2567536'e.preventDefault'와'e.stopPropagation'을 혼동했지만'return false'는 둘과 같습니다. 그리고 대답을 업데이트했습니다. –

관련 문제