2011-01-27 184 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

相關問題