使用jQuery覆盖表单提交事件(1.3.2)

dbf7pr2w  于 2022-12-22  发布在  jQuery
关注(0)|答案(1)|浏览(128)

我找不到解决方案,我需要覆盖之前设置的submit事件处理程序。在我的示例中,我有一个iframe页面,有自己的submit(可能有验证错误,并返回false)。因此,我需要做:

$('<iframe></iframe>')
    .load(function() {
       content = $(this).contents()
       form = content.find('form')
       previous_form_submit = .... //This is my question
       form.unbind("submit")
       form.submit(function() {
           var valid = previous_form_submit()
           if (valid) {
             $.post(form.attr('action'), form.serialize(), function(data) {
                //do something
            })
        })
     })

编辑:更清楚地说,问题是重写事件,但不丢失以前的处理程序与验证。
我使用的是jQuery 1.3.2
我打算用另一种办法解决,但我感到好奇怎么能做到这一点。

nfg76nw0

nfg76nw01#

事件处理程序存储在元素的expando数据存储区中,可通过.data()访问,在本例中,.data('events')用于事件处理程序,然后为绑定提交处理程序执行.submit,为点击执行.click,等等。

jQuery 1.4及以上版本:

如果表单有一个提交处理程序,它将如下所示:

var oldHandler = form​​​​​​​​.data("events").submit[0].handler;

否则,您需要使用$.each()对它们进行循环,例如:

$.each(form.data("events").submit, function(i, h) {    
  var handler = h.handler;
  //do something with handler
});

jQuery 1.3.x版本:

$.each()为例:

$.each(form.data("events").submit, function(i, h) {    
  var handler = h;
  //do something with handler
});

最好在这里循环,因为索引没有被清除,handler可能不是第一项,所以.submit[0]可能是undefined,即使有一个handler。

相关问题