如何使用jQuery UI组合框创建新值

时间:2011-04-25 22:41:10

标签: jquery jquery-ui autocomplete combobox

我刚刚将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'>&nbsp;</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();
        });

2 个答案:

答案 0 :(得分:11)

组合框演示使用基础select元素作为自动完成小部件的后备存储。我不推荐这种形式,允许用户输入他们想要的任何内容。

但是,您可以自己模拟组合框效果而不会有太多麻烦:

var $input = $("#tags").autocomplete({
    source: availableTags,
    minLength: 0
}).addClass("ui-widget ui-widget-content ui-corner-left");

$("<button type='button'>&nbsp;</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来获取输入值,如果你不想弄乱小部件。然后,如果需要,您可以随时添加一个选择选项。