像google这样的自动完成功能无法获取单选按钮事件的数据

时间:2014-01-09 17:21:07

标签: c# javascript jquery asp.net autocomplete

我在我的网站上构建了一个类似Google搜索的选项,并在搜索框中添加了Jquery UI Autocomplete。 我还有两个radio buttonChecked事件,我绑定数据源。

如果选中了Company Name单选按钮,我会使用BindShipperName()或如果选中Product Name我会使用BindProductName()。这些绑定函数绑定适当的数据源。

以下是代码:

if (rdoCompany.Checked){
  listFilter = BindShippmerName();
} else if (rdoProduct.Checked) {
  listFilter = BindProductName();
}

当我使用以下脚本进行自动完成时,它会绑定Checked事件上的相应数据,但由此我无法有效地实现搜索功能。我所做的只是在数据库搜索结果中的任何位置反映键入的组合。所以这是错误的。

function LoadList() {        
  var ds=null;
  ds = <%=listFilter %>;
  $( "#txtConsignee" ).autocomplete({
    source: ds
  });
}

然后我添加了以下脚本以使其正常工作,但是在页面加载时它只有一次绑定数据,Product Name默认情况下会在页面加载时检查,因此它只是绑定产品名称。如果我点击Company Name单选按钮,那么即使我已将此rdoCompany.Checked分配给listFinder

,也会点击其绑定产品名称

我的更新脚本只绑定Product Name如下:

function LoadList(){        
  var ds=null;
  ds = <%=listFilter %>;
  $( "#txtConsignee" ).autocomplete({
    source: function(req, responseFn) {
      var re = $.ui.autocomplete.escapeRegex(req.term);
      var matcher = new RegExp( "^" + re, "i" );
      var a = $.grep( ds, function(item,index){
        return matcher.test(item);
      });
      responseFn( a );
    }
  });
}

我在哪里错了?

1 个答案:

答案 0 :(得分:1)

这是一个解决方案:

C#

string names = "[" + BindShippmerName() + "," + BindProductName() + "]";

JS

function LoadList()
{        
    var names = <%=listFilter %>;  //names will be now a js array of 2 elements
    var $rdoCompany = $('#<%=rdoCompany.ClientID %>');   //Get rdoCompany jquery obj
    var index = $rdoCompany.is(":checked") ? 0 : 1;   //Get selected in client side
    var ds = names[index]:      
    //From here, it's the same 
        $( "#txtConsignee" ).autocomplete({
              source: ds
        });
}

(如果上述操作失败,请尝试var $rdoCompany = $('#<%=rdoCompany.ClientID %>' :radio);,也许我的内存失败:))

我们正在做的是在javascript中“选择”选项“实时”,因此它是动态的,不会只获得初始值。

您的问题是您只获得了初始值,因此如果更改了它就无效。

希望这会有所帮助。干杯