Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Hi jack表单提交,存储原始提交,添加处理,然后正常提交_Javascript_Jquery_Forms_Form Submit - Fatal编程技术网

Javascript Hi jack表单提交,存储原始提交,添加处理,然后正常提交

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 = []

我有一段javascript,我想全局添加到我的站点。这个javascript使用jQuery,将选择任何检测到的表单,存储原始提交过程,进行一些自定义处理,然后通过原始过程正常提交表单

我让它使用下面的代码,除了当它“正常提交表单”时,我得到jQuery的“this.trigger不是函数”错误,但随后页面将post/get/etc发送到适当的目标。如果可能的话,我真的很想尝试删除这个错误。有什么想法吗

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
返回对jQuery
submit
方法的引用,而不是对“原始提交过程”的引用。所以储存它是没有用的

以下几点就足够了:

$('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();

});