如果结果已显示,则不允许显示相同的keyup结果

时间:2015-09-16 17:23:17

标签: jquery

我在这里处理虚拟机。我们为客户托管服务器,以生成他们想要的尽可能多的虚拟机。如果您是系统管理员,我希望能够搜索数据库中的任何公司,并且可以访问公司拥有的VM数量,内存使用情况,防火墙规则等。

如果我的数据库中有一家公司分配给我(已经让我完全访问了那些公司页面而无需搜索它),我可以在我的模态中看到它,我可以点击它并将它重定向到那个公司页面。但是,如果我搜索一个我已经访问过的公司,它会复制已经存在的公司名称。我想要做的是隐藏搜索结果,如果该公司名称已经存在,那么没有重复项。我被告知我可以在JQuery中做到这一点,但我很难过。

$("#SearchValue").keyup(function () {
    if ($("#SearchValue").val().length === 0)
        return $('#ShowResult').html('');
    if ($("#SearchValue").val().length < 3)
        return;
    var searchCo = $('#SearchValue').val();
    var data = { "searchCo": searchCo };
    post(JSON.stringify(data))
        .to("SystemAdmin", "GetCompanyName")
        .done(function(results) {
            jQuery('#ShowResult').html('');
            for (var i = 0; i < results.length; i++) {
                $('#ShowResult').append('<a href="@Url.Action("SwitchCustomerTo", "Account")?customerId=' + results[i].CustomerID + '"> <i class="fa fa-home"> </i>' + results[i].CompanyName + '</a></h5></p>');
            }
        });

1 个答案:

答案 0 :(得分:1)

这是一种可以从锚链接中删除冗余条目的方法。您需要将customerID保存在数组中,并在遍历结果集合中的每个项目时,检查该项目中是否已存在该项目。

$("#SearchValue").keyup(function () {
    if ($("#SearchValue").val().length === 0)
        return $('#ShowResult').html('');
    if ($("#SearchValue").val().length < 3)
        return;
    var searchCo = $('#SearchValue').val();
    var data = { "searchCo": searchCo };
    post(JSON.stringify(data))
        .to("SystemAdmin", "GetCompanyName")
        .done(function(results) {
           var itemArray = new Array();
            jQuery('#ShowResult').html('');
            for (var i = 0; i < results.length; i++) 
            {
                if(itemArray.indexOf(results[i].CustomerID) == -1)
                {
                    itemArray.push(results[i].CustomerID);
                $('#ShowResult').append('<a href="@Url.Action("SwitchCustomerTo", "Account")?customerId=' + results[i].CustomerID + '"> <i class="fa fa-home"> </i>' + results[i].CompanyName + '</a></h5></p>');
               }
            }
        });
});

小提琴:http://jsfiddle.net/7j2wpde8/

虽然我建议您删除服务器端代码上的冗余条目。 (假设您使用C#作为服务器端代码,这就是您可以做的事情。)

[WebMethod]
public List<CustomerObject> GetCompanyName(string searchCo)
{
  List<CustomerObject> result = new List<CustomerObject>();
  var items = // get all company data from datasource
  result = items.GroupBy(x => x.CustomerID).Select(y => y.First()).ToList();
  return result;
} 

编辑:

根据您的要求更新。

[WebMethod]
    public List<CustomerObject> GetCompanyName(string searchCo)
    {
      List<CustomerObject> result = new List<CustomerObject>();
      var items = // get all company data from datasource
      var itemWithCompanyAccess = // get the company for which you have access to data from datasource
      result = items.GroupBy(x => x.CustomerID).Select(y => y.First()).ToList();
      var duplicate = items.Any(x=> x.CustomerID == itemWithCompanyAccess. CustomerID).FirstOrDefault();
  if(duplicate != null)
result.remove(duplicate);      
      return result;
}