2014-02-13 5 views
1

jquery의 preventDefualt 함수 이후에 제출할 때 문제가 있습니다. 제출 버튼을 클릭 한 후 div를 보여주고 싶습니다. 10 초 후에 양식을 숨기고 양식을 계속 제출하고 싶습니다. 내가 simmilar 질문에 대한 많은 답변을 읽었지만, 내가 옳은 해결책을 얻을 수 없습니다.preventDefault() 후 제출 프로세스 재개

$('#form').submit(function(e) { 
    e.preventDefault(e); 
    showPopup(); 

    $(this).unbind('submit').submit(); 
}); 

var showPopup = function() { 
    $('#popup').fadeIn('slow'); 
    setTimeout(function() { hidePopup(); }, 10000); 
    return true; 
} 

var hidePopup = function() { 
    $('#popup').fadeOut('slow'); 
    return true;  
} 

감사합니다 :)

답변

0

setTimeout이는 차단하지 않습니다, 비동기입니다 : 여기에 코드입니다. JSFiddle

당신의 setTimeout() 및 수동으로 jQuery로 양식을 게시하여 해당를 얻을 수 있습니다

$('#form').submit(function (e) { 
    e.preventDefault(e); 
    showPopup(this); 
}); 

var showPopup = function (form) { 
    $('#popup').fadeIn('slow'); 
    setTimeout(function() { 
     hidePopup(form); 
    }, 10000); 
} 

var hidePopup = function (form) { 
    $('#popup').fadeOut('slow', function() { 
     $(form).unbind('submit').submit(); 
    }); 
} 
1

작업 예 : 당신은 마지막에 제출 따라 양식을 전달하고 전화를해야합니다. 또한 플래그가있는 첫 번째 제출인지 확인해야합니다 (onsubmit을 바인드 해제하면 작동합니다).

var allowSubmit = 0; 
$('#form').submit(function(e) { 
    if(!allowSubmit) 
    { 
     e.preventDefault(); 
     showPopup(); 
     setTimeout("$('#form').submit();",10000); 
     allowSubmit = 1 
    } 
}); 

var showPopup = function() { 
    $('#popup').fadeIn('slow'); 
    setTimeout(function() { hidePopup(); }, 10000); 
    return true; 
} 

var hidePopup = function() { 
    $('#popup').fadeOut('slow'); 
    return true;  
} 
+0

'setTimeout'은 차단되지 않습니다. 실행은 즉시 다음 줄로 계속 진행되고 10 초 제한 시간이 다가 오기 훨씬 전에 양식을 제출하십시오. –

+0

에 'return false;'가 추가되어 버튼이 양식을 제출하지 않도록하십시오. –

+0

'e.preventDefault()'가 이미 그렇게했습니다. 반환 false는 폼에서 전송 처리기를 언 바운드하고 전송 한 후에 발생하므로 아무런 효과가 없습니다. –