Javascript 当我添加一行时无法阻止表单提交

Javascript 当我添加一行时无法阻止表单提交,javascript,jquery,forms,Javascript,Jquery,Forms,我累坏了。我的代码无法阻止提交的删除操作。在我添加This.doSomething()之前,它一直运行良好 为什么会发生这种情况?我必须使用默认值吗 工作代码: HTML: 感谢阅读:)在您的submit回调函数中,这个不再指向您的对象,而是指向元素本身 因此,它导致异常,因为元素没有doSomething属性,并且您的返回false被跳过 相反,写下以下内容: ReserveUI.prototype._eventify = function() { var self = this;

我累坏了。我的代码无法阻止提交的删除操作。在我添加
This.doSomething()之前,它一直运行良好

为什么会发生这种情况?我必须使用默认值吗

工作代码:

HTML:


感谢阅读:)

在您的
submit
回调函数中,
这个
不再指向您的对象,而是指向元素本身

因此,它导致异常,因为元素没有
doSomething
属性,并且您的
返回false
被跳过

相反,写下以下内容:

ReserveUI.prototype._eventify = function() {
    var self = this;
    this.$form.input.submit(function(e) {
        e.preventDefault(); // cancels event even if subsequent lines fail
        self.doSomething();
    });
};
请参阅,以获取一个工作示例,该示例显示了导致错误的只是范围问题


这就是脚本调试工具的用途-报告的错误应该使错误相当明显…

在您的
submit
回调函数中,
不再指向您的对象,而是指向元素本身

因此,它导致异常,因为元素没有
doSomething
属性,并且您的
返回false
被跳过

相反,写下以下内容:

ReserveUI.prototype._eventify = function() {
    var self = this;
    this.$form.input.submit(function(e) {
        e.preventDefault(); // cancels event even if subsequent lines fail
        self.doSomething();
    });
};
请参阅,以获取一个工作示例,该示例显示了导致错误的只是范围问题


这就是脚本调试工具的用途-报告的错误应该会使错误变得相当明显…

听起来像是您的
doSomething
代码中有错误(我认为这不仅仅是
在程序中返回false

为确保事件不会继续,即使出现错误,也不要返回false,而是使用
e.preventDefault()

    this.$form.input.submit(function(e) {
        e.preventDefault();
        this.doSomething();
    });

听起来你的
doSomething
代码中有一个错误(我认为这不仅仅是程序中的
returnfalse

为确保事件不会继续,即使出现错误,也不要返回false,而是使用
e.preventDefault()

    this.$form.input.submit(function(e) {
        e.preventDefault();
        this.doSomething();
    });

这是范围不匹配

this.$form.input.submit(function() { //here "this" is ReserveUI
    this.doSomething(); //here "this" is input button
    return false;
});
由于
input
按钮上没有
doSomething()
,脚本将中断,因此不再执行返回false的部分

这是一个你可以绕过这个的方法

ReserveUI.prototype._eventify = function() {
    var $this = this; //create a reference to the object
    this.$form.input.submit(function() {
        $this.doSomething(); //Now call the object method
        return false;
    });
};

这是范围不匹配

this.$form.input.submit(function() { //here "this" is ReserveUI
    this.doSomething(); //here "this" is input button
    return false;
});
由于
input
按钮上没有
doSomething()
,脚本将中断,因此不再执行返回false的部分

这是一个你可以绕过这个的方法

ReserveUI.prototype._eventify = function() {
    var $this = this; //create a reference to the object
    this.$form.input.submit(function() {
        $this.doSomething(); //Now call the object method
        return false;
    });
};


怎么可能返回错误;在这种情况下会导致异常吗?不,请检查示例:相同但不起作用。添加
e.preventDefault
会像预期的那样工作。@Mr.discoupation您为什么相信这一点?尽管
e.preventDefault()
不是一个坏主意,但他仍然有一个
这个
范围问题。@Mr.com
e.preventDefault()
修复了事件处理问题-它不会修复
.doSomething()的问题
实际上没有被调用。@tosin正是因为将
e.preventDefault()
放在回调的顶部可以确保默认值永远不会发生,但是
返回false
可能会被忽略,正如您所看到的。如何返回false;在这种情况下会导致异常吗?不,请检查示例:相同但不起作用。添加
e.preventDefault
会像预期的那样工作。@Mr.discoupation您为什么相信这一点?尽管
e.preventDefault()
不是一个坏主意,但他仍然有一个
这个
范围问题。@Mr.com
e.preventDefault()
修复了事件处理问题-它不会修复
.doSomething()的问题
实际上没有被调用。@tosin正是因为将
e.preventDefault()
放在回调的顶部可以确保默认值永远不会发生,但是
返回false
可能会被忽略,正如您所看到的。他的
doSomething
函数的主体中只有
return false
。我猜他只是删除了他的实际代码。该函数对于
return false
@Sarfraz True没有多大意义,但这仍然是用户应该采取的取消事件默认行为的方法,并且是对此的调用。doSomething()是错误的,因为这不是它所期望的。感谢您的回答。但我不会删除实际代码。我要写点什么而不是做点什么;将来。此代码用于学习。他的
doSomething
函数体中只有
return false
。我猜他刚刚删除了实际代码。该函数对于
return false
@Sarfraz True没有多大意义,但这仍然是用户应该采取的取消事件默认行为的方法,并且是对此的调用。doSomething()是错误的,因为这不是它所期望的。感谢您的回答。但我不会删除实际代码。我要写点什么而不是做点什么;将来。这段代码是用来学习的。不过我认为你的最后一句话用错了。很高兴继续使用“return false”!我喜欢使用它的原因是为了保持代码清晰。谢谢你聪明的回答,除了我认为你的最后一句话弄错了我很高兴继续使用“return false”!我喜欢使用它的原因是为了保持代码清晰。谢谢你聪明的回答