我在使用jquery.simpleModal的模态窗口中有一个表单。由于simpleModal克隆了初始div的内容以创建模式对话框,因此我必须在创建模式对话框后重新绑定事件处理程序。我的代码看起来像这样:
function showForm() {
$('div.contactUs').modal({
opacity: 80,
overlayClose: true,
autoResize: true
});
var container = $('.simplemodal-container');
container.find('li.phone input').mask('(999) 999-9999');
container.find('li.comments textarea').maxChar(1000, { indicator: 'div.commentLength span' });
container.find('form').submit(function () {
try {
var form = $(this);
var action = form.attr('action');
var data = form.serialize();
$.post(action, data, function (result) {
form.html(result);
showForm();
});
} catch (e) {
alert(e);
}
return false;
});
}
但是,如果我打开模态对话框,然后关闭它,然后再次打开它,似乎表单提交处理程序没有连线(第二次打开模态对话框并单击提交结果在整页回发,而不是而不是ajax处理程序踢)。我已经验证了其他东西正在重新绑定(输入掩码和最大字符限制的东西),那么为什么提交处理程序不是?
答案 0 :(得分:0)
由于.submit(function(){})
是.bind('submit',function(){})
的简写,我认为在第一次绑定函数时只使用.live('submit',function(){})
可以解决问题而无需在克隆上重新绑定函数。 .live()
会将事件绑定到当前元素以及将来与您的选择器匹配的任何动态创建的元素。