2017-05-01 86 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>