我在我的网站上构建了一个类似Google搜索的选项,并在搜索框中添加了Jquery UI Autocomplete
。
我还有两个radio button
和Checked
事件,我绑定数据源。
如果选中了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 );
}
});
}
我在哪里错了?
答案 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中“选择”选项“实时”,因此它是动态的,不会只获得初始值。
您的问题是您只获得了初始值,因此如果更改了它就无效。
希望这会有所帮助。干杯