我找不到解决方案,我需要覆盖之前设置的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
我打算用另一种办法解决,但我感到好奇怎么能做到这一点。
1条答案
按热度按时间nfg76nw01#
事件处理程序存储在元素的expando数据存储区中,可通过
.data()
访问,在本例中,.data('events')
用于事件处理程序,然后为绑定提交处理程序执行.submit
,为点击执行.click
,等等。jQuery 1.4及以上版本:
如果表单有一个提交处理程序,它将如下所示:
否则,您需要使用
$.each()
对它们进行循环,例如:jQuery 1.3.x版本:
以
$.each()
为例:最好在这里循环,因为索引没有被清除,handler可能不是第一项,所以
.submit[0]
可能是undefined
,即使有一个handler。