【问题标题】:how to remove the default action using preventDefault in javascript?如何在javascript中使用preventDefault删除默认操作?
【发布时间】:2019-12-14 00:59:14
【问题描述】:

在我的代码的else 条件中,我想删除 preventDefault() 并提交表单。

我不知道该怎么做?

if(email.val() != ""){
            //check email
            e.preventDefault();
            $.ajax({
                type: 'post',
                url: '/register/check-email',
                data: {email: email.val()},
                success: (data) => {
                    console.log(data);
                    if(data == 1){
                        name.css('border', '1px solid #248ea9');
                        email.css('border', '1px solid red');
                        $("div.wrapper div.right div.form form small.error-name").hide();
                        $("div.wrapper div.right div.form form small.error-email").hide();
                        $("div.wrapper div.right div.form form small.error-email-found").show();
                    }else{
                        //remove preventDefault()
                    }
                }
            })
        }

【问题讨论】:

  • preventDefault() 不会在 else 块中运行,因为您还没有把它放在那里。或者更确切地说,如果您的else 代码块触发,第一组{ } 中的任何代码都不会运行。这是一个或另一个。你不能删除一开始就不存在的东西。
  • 它是异步的,你不能这样做
  • @AlonEitan $.ajax() 是一个异步任务,但是为什么不能在else 分支提交表单呢?
  • @Andreas 因为 OP 试图阻止依赖于服务器响应的事情
  • @Saad this 应该是表单,因此this.submit() 也可以工作,因此无需再次查询 DOM,也无需额外的 jQuery 对象。

标签: javascript jquery node.js ajax


【解决方案1】:

我猜你在表单的按钮中执行了e.preventDefault (),这样会阻止表单的提交,如果你想继续提交可以直接使用表单的submit()方法,像这样:

if(email.val() != ""){
            //check email
            e.preventDefault();
            $.ajax({
                type: 'post',
                url: '/register/check-email',
                data: {email: email.val()},
                success: (data) => {
                    console.log(data);
                    if(data == 1){
                        name.css('border', '1px solid #248ea9');
                        email.css('border', '1px solid red');
                        $("div.wrapper div.right div.form form small.error-name").hide();
                        $("div.wrapper div.right div.form form small.error-email").hide();
                        $("div.wrapper div.right div.form form small.error-email-found").show();
                    }else{
                        //remove preventDefault()
                        // get form and submit
                        $("#form").submit()
                    }
                }
            })
        }

【讨论】:

    【解决方案2】:

    将 e.preventDefault() 放在底部或底部的位置并不重要。

    如果您在表单上有操作,您可以在启动提交功能块后立即进行操作。

    var submit = function (e) {
        e.preventDefault()
    }
    

    我不太了解您的情况,但您可以使用其他方法,例如:

    e。停止传播();

    e.stopImmediatePropagation();

    进一步阅读:https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault

    【讨论】:

    • 在ajax回调里面,当然重要的是他把它放在哪里!
    • 据我所知,您在提出请求之前没有提出。我告诉你把它放在 if 语句之前。在 if 块之外。并解释你想做什么你的默认操作是什么形式?我的意思是首先告诉我你为什么需要 e.preventDefault。
    • 但是 OP 专门询问了一个他想放入 ajax success 回调的情况 - 这就是问题所在
    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多