2012-07-20 32 views
3

我正在學習jquery和它的真棒!它很容易做複雜的東西,但我不確定如果自動完成失敗,如何防止某人提交表單(或警告他們)。如果沒有自動完成表單,是否有辦法阻止提交表單?

我在我的網站上有一個表格,它可以自動填充來自我的數據庫的現有數據,並在他們提交時提供該條目的信息。如果他們添加的東西不在數據庫中,那麼我的服務器會將他們退回到表單頁面並讓他們知道錯誤,但我想在填寫表單時提醒他們(在他們提交表單之前) 。長篇小說,我知道如何檢測字段中的變化,但是當字段不在數據庫中時,如何檢測(並阻止提交表單)?我正在考慮的兩種情況是,如果存在自動完成庫存(「ibm」),並且用戶要麼在「完成」之前鍵入「ib」(完成之前)或「自動完成」之後鍵入「ibmm」。檢測jQuery的ISH簡單的方法,如果一個領域沒有被完全自動完成解決

任何建議

更新:?? 按照要求,這裏是我的自動完成代碼(基本上只需要在搜索框中輸入值,提交到一個名爲'autocomplete'的網址):

<script> 
    $(function() { 

    var cache = {}, 
     lastXhr; 
    $("#global-search-field").autocomplete({ 
     minLength: 2, 
     source: function(request, response) { 
     $(".message").empty() 
     var term = request.term; 
     if (term in cache) { 
      response(cache[ term ]); 
      return; 
     } 

     lastXhr = $.getJSON("autocomplete", request, function(data, status, xhr) { 
      cache[ term ] = data; 
      if (xhr === lastXhr) { 
      response(data); 
      if (data == 'no results found'){ 
       //alert(data); 
       //$(".message").empty().append("not found!"); 
      } 
      } 
     }); 
     } 
    }); 

    }); 
    </script> 
+0

表單不是沒有*可見* **「提交」**按鈕的表單。相反,如果出現'不活躍',你知道......灰色字體的顏色和那些東西... – 2012-07-20 00:31:58

+0

你可以使用jQuery進行表單驗證(檢查是否需要的字段中有一些相關內容),但是就我而言, m知道你不能使用它從服務器發送和接收。不要把我的話當成福音,我從我自己對jQuery的研究和我對它的研究中得出這個推論。 – Dom 2012-07-20 00:33:32

+0

附加問題:您如何獲得自動填充的值?通過ajax或靜態數組傳遞給自動完成功能? – 2012-07-20 00:41:33

回答

2

將表單加載爲禁用按鈕。當你填寫表單時,你有一個運行標誌(class = validation)的標籤來通知表單何時準備好,然後你可以啓用該按鈕。

如果您已經知道如果不是所有信息都準備好就會失敗,那麼在嘗試調用服務器時沒有可行的按鈕。

如果您用文字填滿所有三個框,底部的示例將起作用。您可以通過讓每個帶有類的文本框在jquery中使用appendTo()以紅色字體附加文本「必需」來表示控件。

只要有在html元素類的驗證,這將是必須的,這樣我們在輸入數據時,它會刪除這些驗證類:

<html> 
    <head> 
<script src="jquery.js"></script> 
<script type="text/javascript"> 

    $(document).ready(function(){ 

     $("input[name^='test']").blur(function(){ 
      if ($(this).val() != "" && $(this).hasClass("validation")){ 
       $(this).removeClass("validation"); 
      } 

      var check = $(".validation"); //checks to see if there is any more validation 
      if (check.length == 0){ 
       $("#nowSubmit").prop("disabled", false); 
      } else { 
       $("#nowSubmit").prop("disabled", true); 
      } 
     }); 
    }); 
    </script> 
    </head> 
    <body> 

<form> 
<input id="control1" name="test" type="textbox" class="validation" /> 
<input id="control2" name="test" type="textbox" class="validation" /> 
<input id="control3" name="test" type="textbox" class="validation" /> 

<input id="nowSubmit" type="submit" value="Click Here" disabled="true"/> 
</form> 
</body> 
</html> 

工作示例這裏:http://jsfiddle.net/hSatZ/

1

你可以使用ajax請求放在自動完成字段上的「onchange」事件,它會檢查特定的值是否在db中,並在需要時通知用戶有關錯誤而不提交表格

+0

我是web開發人員的新手。爲了正確理解你,我在這個表單上有兩個請求。一個是我的常規自動完成,另一個是對keyup的ajax調用,或者是檢查它是否完全匹配並且不通知用戶的東西? – Lostsoul 2012-07-20 01:14:29

+0

沒有理由回到數據庫......你已經緩存了結果。如果用戶從自動填充中選擇了一些內容,它將位於緩存中。 – 2012-07-20 02:56:55