Javascript Hi jack表单提交,存储原始提交,添加处理,然后正常提交
我有一段javascript,我想全局添加到我的站点。这个javascript使用jQuery,将选择任何检测到的表单,存储原始提交过程,进行一些自定义处理,然后通过原始过程正常提交表单 我让它使用下面的代码,除了当它“正常提交表单”时,我得到jQuery的“this.trigger不是函数”错误,但随后页面将post/get/etc发送到适当的目标。如果可能的话,我真的很想尝试删除这个错误。有什么想法吗Javascript Hi jack表单提交,存储原始提交,添加处理,然后正常提交,javascript,jquery,forms,form-submit,Javascript,Jquery,Forms,Form Submit,我有一段javascript,我想全局添加到我的站点。这个javascript使用jQuery,将选择任何检测到的表单,存储原始提交过程,进行一些自定义处理,然后通过原始过程正常提交表单 我让它使用下面的代码,除了当它“正常提交表单”时,我得到jQuery的“this.trigger不是函数”错误,但随后页面将post/get/etc发送到适当的目标。如果可能的话,我真的很想尝试删除这个错误。有什么想法吗 var originalForm = [] var originalSubmit = []
var originalForm = []
var originalSubmit = []
$('form').each(function(i) {
originalForm[i] = this;
originalSubmit[i] = $(this).submit;
$(this).submit(function(e){
// stop form
e.preventDefault();
// do processing
// here
// process form as it was originally intended
$(this).unbind('submit');
originalSubmit[i].apply(originalForm[i]);
});
});
以下是错误:
jquery.min.js:4未捕获类型错误:this.trigger不是函数
在HTMLFormElement.r.fn.(:8000/test/anonymous function)()
在HTMLFormElement。(journey.js:915)
在HTMLFormElement.dispatch(jquery.min.js:3)
位于HTMLFormElement.q.handle(jquery.min.js:3)
原始表单是一个原始DOM元素,您试图将其用作调用jQuery submit方法的上下文。考虑到这是无效的,你可以这样做
originalSubmit[i].apply($(originalForm[i]));
…使其成为jQuery对象,或者可能
originalForm[i] = $(this);
…因此它已经是一个jQuery对象。可以使用本机提交,jQuery提交侦听器不会侦听它,也不需要删除它 例如:
$('form').submit(function(e){
e.preventDefault()
var form = this;
// when conditions met such as after some ajax perhaps
form.submit();
});
$(this).submit
返回对jQuerysubmit
方法的引用,而不是对“原始提交过程”的引用。所以储存它是没有用的
以下几点就足够了:
$('form')。提交(函数(e){
//停止形式
e、 预防默认值();
//处理
//这里
//按照最初的意图处理表单
console.log(this.id,e.target.id)
//这个。提交();
});代码>
谢谢Kosh,我喜欢这个解决方案的简单性,但是,当我尝试这个方法时,我发现“this.submit”不是一个函数。我更喜欢这种方法@taplar的建议如预期的那样有效,但如果我能让它工作,我更喜欢这样。如果它在循环中,方法会改变吗$('form')。每个(函数(i){$(this.submit)(函数(e){};});我是否需要循环,因为选择器将应用于它匹配的所有内容?@sol,你不必循环<代码>$('form')。提交(函数)
为页面上的所有表单设置处理程序。以防万一:您不能同时在页面上提交多个表格。谢谢。我已经更新了代码,仍然得到这个。submit()不是一个函数。。。我正在使用$('form[data custom attribute=value]').submit(函数(e){e.preventDefault();this.submit();})选择表单@sol,可能在某个地方发生了变化,但您可以用e.target.submit()替换它
$('form').submit(function(e){
e.preventDefault()
var form = this;
// when conditions met such as after some ajax perhaps
form.submit();
});