当我添加一行时无法阻止表单提交
Can not prevent form submit when I add one line
I be stacked.我的代码无法阻止提交操作。在我添加this.doSomething();
之前,这工作正常。
为什么会这样?我必须使用预防默认吗?
工作代码:http://jsfiddle.net/WwW5R/
.HTML:
<div id="container">
<form action="" method="post" id="input">
<input type="submit">
</form>
</div>
JavaScript:
$(function() {
var ReserveUI = function($el) {
this.$form = {
input: $el.find('#input')
};
this._eventify();
};
ReserveUI.prototype.doSomething = function() {
return false;
}
ReserveUI.prototype._eventify = function() {
this.$form.input.submit(function() {
this.doSomething(); //if comment out this line, it works
return false;
});
};
var UI = new ReserveUI($("#container"));
});
感谢您的阅读:)
在 submit
回调函数中,this
不再引用对象,而是引用元素本身。
因此,它会导致异常,因为该元素没有 doSomething
属性,并且您的return 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();
});
};
有关工作示例,请参阅 http://jsfiddle.net/xgGGx/1/,该示例显示这只是导致错误的范围问题。
这就是脚本调试工具的用途 - 报告的错误应该使错误相当明显......
这是范围不匹配。
this.$form.input.submit(function() { //here "this" is ReserveUI
this.doSomething(); //here "this" is input button
return false;
});
由于input
按钮上没有doSomething()
,脚本中断,因此不再执行要return 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;
});
};
演示
听起来你的doSomething
代码中有一个错误(我认为这不仅仅是在你的程序中return false
)。
若要确保事件不会继续,即使出现错误,也不要返回 false,而是改用 e.preventDefault()
:
this.$form.input.submit(function(e) {
e.preventDefault();
this.doSomething();
});
相关文章:
- HTML表单提交时未执行外部函数
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 将图像上传ajax与表单提交ajax相结合
- Javascript无法处理表单提交
- 如何在我的情况下禁用表单提交
- 加载后的页面与ajax表单提交不起作用
- angularjs-控制器在表单提交时未调用
- 禁用带有字符白名单的表单提交
- 如何使用Google Analytics跟踪表单提交
- 使用javascript将表单提交到iframe目标中
- e.preventDefault在表单提交时被忽略
- AngularJS JQuery Ajax表单提交等效
- JavaScript表单提交帮助
- PHP表单提交和重定向
- 当所有输入文本字段都为空时,禁止表单提交,但当jquery中的任何字段不为空时允许提交
- setTimeOut AFTER jQuery表单提交
- 从函数中选择要触发表单提交的正确元素
- JavaScript表单提交没有't fire asp服务器端点击功能的提交按钮
- 当我添加一行时无法阻止表单提交
- 根据 Google 表单提交中同一行中的另一个值更改单元格的值