2012-07-20 34 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