我刚刚将jQuery UI组合框添加到页面中。它似乎将选择限制为仅传入(或存在于选择列表中)的选择。我想要做的就是让用户输入一个不在选择列表中的值,然后将数据发送到服务器(在帖子上)并创建一个。我看不到任何禁用'验证'的选项。我该如何添加此功能?
- 编辑 -
我已添加代码以使自动完成工作时附加一个按钮。但是,在调用Ajax方法时,这不起作用。 Ajax方法正确地返回json(颜色列表)但是当我开始输入'Re'时希望它会过滤掉包含Red的项目,但它没有。
这是我的代码:
var $colInput = $("#Colour").autocomplete({
source: function (request, response) {
$.ajax({
url: "/admin/stockitems/colours",
dataType: "json",
data: { id: null },
success: function (data) {
var arr = [];
$.each(data, function (i, val) {
arr.push(val.Title);
});
response(arr);
}
});
},
minLength: 0
}).addClass("ui-widget ui-widget-content ui-corner-left");
$("<button type='button'> </button>")
.attr("tabIndex", -1)
.attr("title", "Show All Items")
.insertAfter($colInput)
.button({
icons: {
primary: "ui-icon-triangle-1-s"
},
text: false
})
.removeClass("ui-corner-all")
.addClass("ui-corner-right ui-button-icon")
.click(function () {
// close if already visible
if ($colInput.autocomplete("widget").is(":visible")) {
$colInput.autocomplete("close");
return;
}
$(this).blur();
$colInput.autocomplete("search", "");
$colInput.focus();
});
答案 0 :(得分:11)
组合框演示使用基础select
元素作为自动完成小部件的后备存储。我不推荐这种形式,允许用户输入他们想要的任何内容。
但是,您可以自己模拟组合框效果而不会有太多麻烦:
var $input = $("#tags").autocomplete({
source: availableTags,
minLength: 0
}).addClass("ui-widget ui-widget-content ui-corner-left");
$("<button type='button'> </button>")
.attr("tabIndex", -1)
.attr("title", "Show All Items")
.insertAfter($input)
.button({
icons: {
primary: "ui-icon-triangle-1-s"
},
text: false
})
.removeClass("ui-corner-all")
.addClass("ui-corner-right ui-button-icon")
.click(function() {
// close if already visible
if ($input.autocomplete("widget").is(":visible")) {
$input.autocomplete( "close" );
return;
}
$(this).blur();
$input.autocomplete("search", "" );
$input.focus();
});
基本上,这是自动完成小部件的默认行为,另外还有一个按钮,可以下拉所有选项。
这样,支持字段是input
元素,您可以在表单提交时获取用户的输入,并将其添加到源代码中。
以下是一个有效的例子:http://jsfiddle.net/andrewwhitaker/CDYBk/1/
答案 1 :(得分:0)
你也可以用$(...)。parentNode.children [1] .children [0] .value来获取输入值,如果你不想弄乱小部件。然后,如果需要,您可以随时添加一个选择选项。