2012-06-28 61 views
1

我有一個簡單的形式是這樣的:jQuery的對話形式提交不張貼值

<form method="post" name="change_pass" id="change_pass" action="change_pass2.php"> 
    <input type="hidden" id="uid" value="<?php echo $userid ?>"> 
    <div id="dialog" style="display:none"> 
     <input type="text" name="pass" id="pass">Password : 
     <input type="text" name="conf_pass" id="conf_pass">Confirm Password: 
    </div> 
</form> 
<div id="weak" style="display:none" title="Weak password"> 
    <p >Please make sure your password is atleast 8 characters</p> 
</div> 
<div id="mismatch" style="display:none" title="Failure"> 
    <p>Password mismatch</p> 
</div> 
</body> 
</html> 

我使用jQuery用戶界面的對話框函數來創建一個對話的形式就是這樣,

$(function(){ 
    $('#dialog').dialog({ 
     title : 'You must change your password', 
     modal : true, 
     closeOnEscape: false, 
     dialogClass: 'no-close', 
     resizable: false, 
     draggable: false, 
     buttons: { 
      'Change Password' : function() { 
       if ($('#pass').val().length < 8 || $('#pass').val() == 'dantours') {       
        $('#weak').dialog(); 
       } 
       else if ($('#pass').val() != $('#conf_pass').val()){ 
        $('#mismatch').dialog(); 
       } 
       else 
        $('#change_pass').submit(); 
       } 
     } 
    }); 
}); 

但在change_pass2.php頁面,$ _POST數組爲空。我一直在試圖弄清楚這個問題,一直盯着顯示器。

+2

我注意到你的隱藏輸入沒有'name'屬性,因此不會在其中,儘管其他人也這麼做。 –

+0

個人而言,我認爲隱藏用戶名但是要求輸入密碼是一個非常糟糕的主意。這是什麼原因呢? –

+0

嘗試並使用Chrome開發人員工具(與Chrome集成)或Firebug查看實際從表單提交的內容。 –

回答

5

jQuery對話框會將對話框移動到表格範圍之外的正文結尾,如here所述。所以不會有任何數據發佈。

你需要這樣做:

$("#dialog").dialog({your options...}).parent().appendTo($("#change_pass")); 
+0

就像一個魅力。非常感謝好友。 – Indy

+0

其實charlietfl的解決方案更加清潔和高效。由於ASP.NET webform的愚蠢,我必須做appendTo。 – viclim

+0

謝謝你,正在尋找這個解決方案 – Diemuzi

2

因爲對話框被追加到身體,無論您放置元素在你的代碼,並且將不再是你的表格的孩子,只是改變HTML有形式的對話

<div id="dialog" style="display:none"> 
    <form method="post" name="change_pass" id="change_pass" action="change_pass2.php"> 
     <input type="hidden" id="uid" value="<?php echo $userid ?>">  
     <input type="text" name="pass" id="pass">Password : 
     <input type="text" name="conf_pass" id="conf_pass">Confirm Password:  
    </form> 
</div> 

的原因追加到身體的孩子是允許的定位是基於身體