2014-07-11 61 views
1

我有一个文本框用于下拉(使用Css)。该文本框的工作方式与google suggest类似。当我输入一个字母时,文本框将填入与输入的字母匹配的单词。 表单提交我需要编写一个验证,检查用户是否从列表中选择了一个项目。如果不显示错误消息。验证方法从列表中选择至少一个项目

HTML:

<ul class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all" id="ui-id-2" tabindex="0" style="display: none; width: 251px; top: 143.59375px; left: 28.1875px;"> 
    <li class="ui-menu-item" role="presentation"><a id="ui-id-7" class="ui-corner-all" tabindex="-1">Mau Ramir - [email protected]</a></li> 
    <li class="ui-menu-item" role="presentation"><a id="ui-id-8" class="ui-corner-all" tabindex="-1">Mah Gov - [email protected]</a></li> 
    <li class="ui-menu-item" role="presentation"><a id="ui-id-9" class="ui-corner-all" tabindex="-1">Mdu ira - [email protected]</a></li> 
    <li class="ui-menu-item" role="presentation"><a id="ui-id-10" class="ui-corner-all" tabindex="-1">Mdh Kn - [email protected]</a></li> 
</ul> 

这是我试过到目前为止(但不工作):

$.validator.addMethod("validSmartSrch", function (value, element) { 
      var notValid = 0; 
      var carts = $("[id^='ui-id-']").children() 
      valid = false; 

      if (value == $.inArray(value, carts)) { 
       valid = true 
      } 

     return valid; 
    }, 'Please select at least on item from the list'); 

回答

0

我最终以这种方式解决了这个问题。

$.validator.addMethod("validSmartSrch", function (value, element) { 

       var items = []; 
       var valid = false; 
       // push all the values into an array 
       $("[id^='ui-id-']").each(function (i, e) { 
        items.push($(e).text()); 
       }); 

       // check if the item exist in the array 
       var itemIndex = $.inArray(value, items); 

       if (itemIndex != -1) { 
        valid = true; 
       } 
       return valid; 
      }, 'Please select at least one item from the list'); 
2

试试这个:

$.validator.addMethod("validSmartSrch", function (value, element) { 
    var carts = $("[id^='ui-id-']").map(function() { 
     return $(this).text(); 
    }).get(); 

    return $.inArray(value, carts) != -1; 
}, 'Please select at least one item from the list'); 

你并不需要调用.children(),因为与该选择器匹配的元素没有孩子。您需要将元素列表转换为字符串数组。 .map()将获得它们中的每一个的文本并返回它们的jQuery集合,.get()会将其转换为普通数组。

$.inArray只是返回数组中元素的位置,所以您需要将它与-1而不是value进行比较。

+0

谢谢。但它一直在回避虚假。 – BumbleBee

+0

你可以做一个jsfiddle来演示它吗? – Barmar

+0

由于某些原因,.map不会返回文本,而是返回儿童。 – BumbleBee

相关问题