2013-02-21 167 views
3

我一直试图让我的头在短时间内完成自动完成,并且只是将我的头靠在墙上试图让它工作。我已经尝试了很多例子,但没有任何意义可供我使用。JQuery AutoComplete Combobox

我已经创建了一个例子,我希望解释我正在尝试做什么。这是一个MVC 3应用程序

我正在使用jquery站点的自动完成代码http://jqueryui.com/autocomplete/#combobox,我将它链接到我的_Layout.cshtml文件的标题以及所有其他必需的js和css文件中。

我在Home/Index.cshtml中查看的Div以及与之执行操作的按钮。

<div id="SearchDiv"></div> 
<button id="SearchBtn" type="button" style="float: right">Search</button> 

视图包括其中I创建SELECT元素,并且还定义按钮点击JS文件。

<script src="@Url.Content("~/Scripts/combobox.js")" type="text/javascript"></script> 

JS文件内容如下。

 var theader = '<table class="tbl">\n'; 
     var tbody = ''; 

for (var i = 0; i < 10; i++) { 
    if (i % 2 == 0) 
     tbody += '<tr>'; 
    tbody += '<td><select class="SelectionControls"/><option value="0"></option>'; 
    tbody += '<option value="1">This is a test</option>'; 
    tbody += '<option value="2">This is a test 1</option>'; 
    tbody += '<option value="3">This is a test 2</option>'; 
    tbody += '<option value="4">This is a test 3</option>'; 
    tbody += '<option value="5">This is a test 4</option>'; 
    tbody += '<select></td>'; 

    if (i % 2 != 0) 
     tbody += '</tr>\n'; 
} 
var tfooter = '</table>'; 
document.getElementById('SearchDiv').innerHTML = theader + tbody + tfooter; 

$(".SelectionControls").combobox(); 

$("#SearchBtn").click(function() { 
    var readtheselectedvalue= $(".SelectionControls")[0].val(); 
}); 

当我运行代码除了将组合框放到表中的屏幕上时,没有任何反应,但它们都是空的。我需要用上面的纹理值填充组合框,以便选中的文本显示在组合框文本框中,但是当我读取val()时,我需要它返回与该选择相关的值0 - 5。

我需要能够读取JavaScript中的值0-5,因为我有进一步的处理,我需要按一下搜索按钮的值。

如果有人可以请告诉我我是如何完成的,我将非常感激,因为我一直在努力争取这么多年。

+0

就这样我很清楚,你打算在这个组合框的模型上搜索吗?自动完成是在搜索由控制器填充的选择对象的集合,还是将其作为硬编码到JS文件中的静态列表?你应该看看Select2(http://ivaynberg.github.com/select2/)和Chosen(http://harvesthq.github.com/chosen/),我已经在ASP MVC应用中使用了它们,很棒 – Jack 2013-02-21 20:40:10

+0

组合框显示一个json结果,这就是为什么我在javascript中创建了组合框。组合框是我写的外部jqgrid过滤系统的一部分。我需要动态地创建组合框,因为可以有几个,所有用户都可以配置,所以我不能简单地将它们放入HTML中。 – user2096992 2013-02-21 22:43:09

回答

1

我的猜测是,由于您在创建组合框的JavaScript函数中创建了选择列表,因此选择列表尚未出现在文档中,因此组合框插件无法找到它来构建您的组合框自动完成列表。你可以尝试几件事:

  1. 只要在你的视图的HTML中选择列表,而不是使用JavaScript构建它。我真的不明白为什么你需要用JavaScript来做到这一点。然后,将你的调用放在document.ready()中的.combobox()中,以便在文档被完全加载后才调用它。

    $(document).ready(function() { 
        (".SelectionControls").combobox(); 
    }); 
    
  2. 如果必须建立它JS尝试把你的电话给setTimeout的内部.combobox。这可能会让页面有足够的时间在调用.combox函数之前进行更新,当.combobox正在查找它时,它将在那里进行更新。

    setTimeout(function(){$(".SelectionControls").combobox()}, 0); 
    

而且,后也自动完成组合框挣扎,我终于只是写我自己的插件,做我需要的一切。如果你想尝试一下,这是在https://github.com/tmooney3979/jquery.ui.combify

+0

我已经得到了这个工作,不要问我如何,因为我不能告诉你。它肯定是我误打错了什么的。无论如何。我现在禁用了removeIfInvalid方法的一部分,该方法从组合框的输入框中删除无效文本。我如何将其作为自由文本阅读而不是从组合框内选择?我似乎无法访问它。 – user2096992 2013-02-21 22:35:24

+0

你的插件很棒,谢谢! – GendoIkari 2013-09-26 14:48:24

7

只是一个提示后,自己与这么多autocompletion脚本挣扎。

Chosen是有史以来最好的自动补全插件。

+0

我已经得到这个工作了。您是否知道我如何阅读用户可以输入到组合框文本框中的自由文本,因为我禁用了自动完成js的一部分,因为我想保留它并将其读取,因此删除了该部分。 – user2096992 2013-02-21 22:38:30