2017-05-01 130 views
1

這個問題已被問及不少時間回答。我已經搜索過,因此無法找到有效的解決方案。我試過e.preventdefault()return false。都沒有工作。然後,我看到我需要回到AJAX,不能使用承諾,我拒絕這樣做,我拒絕認爲沒有辦法通過承諾來實現。停止窗體重定向?

反正

代碼:

var submitDataForm = function() { 
    console.log("button called"); 


    var email = document.getElementById('email'); 
    var first = document.getElementById('first-name'); 
    var last = document.getElementById('last-name'); 
    var web = document.getElementById('domain'); 
    var city = document.getElementById('city'); 
    var obj = document.getElementById('obj'); 
    var describe = document.getElementById('describe'); 
    var brandpower = document.getElementById('brandpower'); 

    if (email.checkValidity() && first.checkValidity() && web.checkValidity() && city.checkValidity() && obj.checkValidity()) { 
     var emailV = email.value; 
     var firstV = first.value; 
     var webV = (web.value == undefined) ? 'null' : web.value; 
     var cityV = city.value; 
     var objV = obj.options[obj.selectedIndex].value; 
     var describeV = (describe && describe.options && describe.selectedIndex) ? describe.options[describe.selectedIndex].value : describe.value; 
     var brandpowerV = (brandpower && brandpower.options && brandpower.selectedIndex) ? brandpower.options[brandpower.selectedIndex].value : brandpower.value; 
     var radio = jQuery('input[name="dealer"]:checked').val(); 


     jQuery.post("/form-one/?" + "email=" + emailV + "&first=" + firstV + 
       cityV + "&domain=" + webV + "&obj=" + objV + "&describe=" + describeV + "&brandpower=" + brandpowerV + 
       "&radio=" + radio, function() { 
        console.log("data sent"); 
       }) 
       .done(function() { 
        console.log("data success"); 
       }) 
       .fail(function() { 
        console.log("data failed"); 
       }) 
       .always(function() { 
        console.log("data finished"); 
        email.value, first.value, web.value, city.value, obj.value, describe.value, brandpower.value = ""; 
//window.location.href = "/"; 
       }); 
    } else { 
     $('#error').css('display', 'block').delay(5000).queue(function (next) { 
      jQuery('#error').fadeOut('slow').css('display', 'none'); 
     }); 
    } 
} 


<button id="next" class="green-button" onClick="submitDataForm()">Next</button> 

同樣,我想擁有的形式做什麼,但提交的數據(將增加後的自定義事件)沒有刷新或重新加載。

謝謝!

+1

* * - 我不知道「我拒絕認爲沒有辦法與承諾做到這一點。」看看這個或那個方面有什麼承諾。 *「我需要回到AJAX」* - 你是什麼意思「回到」?顯示的代碼使用Ajax,並且不取消該按鈕的任何默認行爲,並且假設該按鈕是一個提交按鈕(如果它處於表單中),它將提交該表單。 – nnnnnn

+0

您是否只是普通的'

+1

@ c-smile - 如果'type'屬性不存在於'

回答

1

event.preventDefault確實有效。作爲nnnnnn指出的那樣,你不顯示,你嘗試過,但我懷疑你沒有正確使用它,更可能的,你沒有通過event進入處理程序和eevent(不管你把它命名爲)實際上undefined。下面是一種方式的例子正確地使用它:

$('.ajax-submit').click(function(event) { 
 
    event.preventDefault(); 
 
    console.log("button called"); 
 
    //... all your other code here 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<form action=""> 
 
<button id="next" class="green-button ajax-submit" > Next</button> 
 
</form>