2011-01-27 185 views
0

我在使用jquery.simpleModal的模式窗口中创建窗体。由于simpleModal克隆了初始div的内容以创建模态对话框,所以我必须在创建模态对话框后重新绑定事件处理程序。我的代码看起来是这样的:Javascript事件处理程序未触发

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

由于.submit(function(){}).bind('submit',function(){})的简写,我认为只要在第一次使用.live('submit',function(){})来绑定函数就可以解决您的问题,而无需重新绑定克隆函数。 .live()将事件绑定到当前元素以及将来与您的选择器匹配的任何动态创建的元素。

+0

这确实解决了它,但我仍然想知道为什么重新绑定不起作用。如果有人能回答我会给他们答案。否则,我会给你信贷。 – Chris 2011-01-27 18:23:54

相关问题