2013-01-16 72 views
0

我在使用Jquery模式對話框時遇到了一些麻煩。我在這裏要做的是將表單提交給控制器,但是在單擊確定後提交空白值。這是Jquery的代碼:jquery表單提交空白值

<script> 
    $(function() { 
    var username = $("#username"), 
     email = $("#email"), 
     password = $("#password"), 
     allFields = $([]).add(username).add(email).add(password), 
     tips = $(".validateTips"); 

    function updateTips(t) { 
     tips 
     .text(t) 
     .addClass("ui-state-highlight"); 
     setTimeout(function() { 
     tips.removeClass("ui-state-highlight", 1500); 
     }, 500); 
    } 

    function checkLength(o, n, min, max) { 
     if (o.val().length > max || o.val().length < min) { 
     o.addClass("ui-state-error"); 
     updateTips("Length of " + n + " must be between " + 
      min + " and " + max + "."); 
     return false; 
     } else { 
     return true; 
     } 
    } 

    function checkRegexp(o, regexp, n) { 
     if (!(regexp.test(o.val()))) { 
     o.addClass("ui-state-error"); 
     updateTips(n); 
     return false; 
     } else { 
     return true; 
     } 
    } 

    $("#create1").dialog({ 
     autoOpen: false, 
     height: 300, 
     width: 350, 
     modal: true, 
     buttons: { 
     "Create an account": function() { 
      var bValid = true; 
      allFields.removeClass("ui-state-error"); 

      bValid = bValid && checkLength(username, "username", 3, 16); 
      bValid = bValid && checkLength(email, "email", 6, 80); 
      bValid = bValid && checkLength(password, "password", 5, 16); 

      bValid = bValid && checkRegexp(username, /^[a-z]([0-9a-z_])+$/i, "Username may consist of a-z, 0-9, underscores, begin with a letter."); 
      // From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ 
      bValid = bValid && checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. [email protected]"); 
      bValid = bValid && checkRegexp(password, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9"); 

      if (bValid) { 
       $(this).dialog("close"); 
       $('#createUser').submit(); 

      } 
     }, 
     Cancel: function() { 
      $(this).dialog("close"); 
     } 
     }, 
     close: function() { 
     allFields.val("").removeClass("ui-state-error"); 
     } 
    }); 

    $("#create").button().click(function() { 
     $("#create1").dialog("open"); 
     }); 
    }); 
    </script> 

這是HTML代碼:

<div id="create1" title="Create new user"> 
       <form id="createUser" method="get" name="createUser"> 
       <p class="validateTips">All form fields are required.</p> 


     <label for="name">Name</label> 
     <input type="text" name="username" id="username" class="text ui-widget-content ui-corner-all" /> 
     <label for="email">Email</label> 
     <input type="text" name="email" id="email" value="" class="text ui-widget-content ui-corner-all" /> 
     <label for="password">Password</label> 
     <input type="password" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" /> 
     </form> 
    </div> 

那麼,出了什麼錯在這裏。我一直在尋找命名問題,但它沒有幫助。有誰知道如何解決這個問題?非常感謝你們。

回答

1

我覺得有什麼錯在這裏,像你清除所有的輸入值,您提交表單之前。

if (bValid) { 
    $(this).dialog("close"); 
    $('#createUser').submit(); 
} 

close: function() { 
    allFields.val("").removeClass("ui-state-error"); 
} 
+0

ohhhhh。我刪除了該行並修復了它。任何想法是什麼刪除類? – user1681961

+0

您是否刪除了$(this).dialog(「close」);如果您的網頁在提交後重新加載,我認爲沒關係。但如果你刪除allFields.val(「」).removeClass(「ui-state-error」);當用戶意圖關閉並重新打開對話框時,您將顯示帶有舊值和最後一個錯誤的對話框。 –

+0

我剛剛刪除了close:function()就是這樣。啊......我明白了...... – user1681961

0

這可能會幫助,嘗試從HTML頁面獲取值如$("#username").val();

+0

我不明白,你的地方,在? – user1681961

+0

'var username = $(「#username」), email = $(「#email」), password = $(「#password」),'這是幹什麼的? – somesh

+0

初始化jquery模式對話框中的輸入字段。我似乎無法弄清楚在哪裏得到這個輸入框的值 – user1681961