javascript - 阻止表单重定向?

标签 javascript jquery html

这个问题已经被问过并回答过很多次了。我已经搜索过所以找不到有效的解决方案。我尝试了e.preventdefault()return false。两者都不起作用。然后我发现我需要回到 AJAX 并且不能使用 Promise,我拒绝这样做,并且我拒绝认为没有办法用 Promise 来做到这一点。

无论如何,

代码:

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>

同样,我试图让表单除了提交数据(稍后将添加自定义事件)之外什么都不做,而无需刷新或重新加载。

谢谢!

最佳答案

event.preventDefault 确实有效。正如nnnnnn指出的,您没有显示您在哪里尝试过它,但我怀疑您没有正确使用它,很可能您没有将事件传递到处理程序中而eevent(无论你怎么命名)实际上是未定义。以下是正确使用它的一种方法的示例:

$('.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>

关于javascript - 阻止表单重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43714029/

相关文章:

javascript - 如何循环JSON上的所有数据

jquery - 使 jQuery AJAX 具有非 javascript(非 ajax)后备?

html - 是否可以制作每行具有不同数字列和列宽的 CSS3 表格?

javascript - 非常奇怪的 JS/HTML 错误

html - 我想在html中实现悬浮窗

javascript - 为什么我的表单发布函数会打开我的 .pl 文件而不是执行它?

javascript - 推迟 Vue block 的渲染,直到数据加载

javascript - 我想在 JQUERY 将鼠标悬停在 anchor 标记上时显示 div

c# - 发布到我的服务器时外部 javascript 文件未加载

javascript - Bootstrap Modal 和 PartialView 中的 ASP.net MVC 4 验证