2012-10-22 266 views
2

我有下面的代碼不工作。我希望你能幫助我。jQuery提交表單

基本上我有一個表單,我想確認之前先使用jQuery對話框進行提交。所以當我點擊提交我得到的對話框,但是當我按是確認什麼都沒有發生!

$(function() { 

     $('#massform').submit(function(e){ 
      e.preventDefault(); 
      $('#dialog-mass-confirm').dialog('open'); 
     }); 


     $("#dialog-mass-confirm").dialog({ 
      autoOpen: false, 
      resizable: false, 
      draggable: false, 
      height:180, 
      modal: true, 
      buttons: { 
       "No": function() { 
        $(this).dialog("close"); 
       }, 
       "Yes": function() { 
        $("#massform").submit(); 
       } 
      } 
     }); 
    }); 

<form id="massform" method="post" action="new.php"> 
    <input type="text" name="email" size="41"> 
    <input type="submit" value="Submit"> 
</form> 
+0

按「是」時是否調用e.preventDefault()? – Douglas

+0

任何東西在控制檯上?此外,你有一個聽衆onsubmit,所以你是防止默認行爲,即使你從彈出對話框 – Alfabravo

+0

到道格拉斯呼叫事件,是的,它確實 - :)現在我想通了 – user1766734

回答

0

看來,你可能有一個循環引用,因爲你重新綁定功能提交的表單,然後調用從中就會觸發擺在首位開模態同一事件的模式提交。我建議以下,以避免這個問題:

$(function() { 

    $('#submitButton').click(function(e){ 
     e.preventDefault(); 
     $('#dialog-mass-confirm').dialog('open'); 
    }); 


    $("#dialog-mass-confirm").dialog({ 
     autoOpen: false, 
     resizable: false, 
     draggable: false, 
     height:180, 
     modal: true, 
     buttons: { 
      "No": function() { 
       $(this).dialog("close"); 
      }, 
      "Yes": function() { 
       $("#massform").submit(); 
      } 
     } 
    }); 
}); 

<form id="massform" method="post" action="new.php"> 
    <input type="text" name="email" size="41"> 
    <input ID="submitButton" type="button" value="Submit"> 
</form> 
+0

你是對的,但我仍然需要添加以下是爲了防止表單提交時,我點擊提交按鈕。 – user1766734

+0

在我的示例中,值爲「提交」的按鈕不再是提交類型,而是按鈕類型。所以點擊它不會提交表單,只能打開模式。 – CrazyWebDeveloper

0

你shold查找範圍和事件的詳細trigering讓您瞭解您所面臨的問題。1.你已經創建了一個綁定到你的表單提交事件的jqery函數。

$('#massform').submit(function(e){ 
      e.preventDefault(); 
      $('#dialog-mass-confirm').dialog('open'); 
     }); 

當您使用提交按鈕的事件被炒魷魚,而打開的對話框。但是當你提交表格時

  "Yes": function() { 
      $("#massform").submit(); 

它會觸發前面指出的綁定函數......這會阻止自己被提交的表單。準確地說,你只需重新打開對話框。但是發生得太快了,你不會注意到它。

如果你被迫使用兼容性的原因提交的行動......你可以使用一個變量祿做骯髒的工作...

$('#massform').submit(function(e, lock){ 
    if(lock) 
    e.preventDefault(); 
    $('#dialog-mass-confirm').dialog('open'); 
}); 

,而你可以通過設置在提交鎖。從來沒有嘗試過,但它應該工作。我通常最終使用文檔就緒範圍中的變量。

這是一個解決方案,當您不能修改窗體。醜,但它的作品。