如何使用jquery auto complete combobox设置默认值?

时间:2010-05-01 11:24:23

标签: jquery combobox jquery-ui-autocomplete

使用the jquery ui autocomplete 组合框时,您可以为组合框设置默认值吗?

14 个答案:

答案 0 :(得分:24)

我尝试以我在自己项目中的方式回答这个问题。

我从您发布的页面中读取了演示源代码。在生成自动完成组合框的jquery代码中,我添加了一行代码,这些代码在创建组合框时处理,该组合框从“select”元素读取所选值。这样你就可以通过编程方式设置默认值(就像你没有使用自动完成组合框一样)

以下是我添加的一行:

input.val( $("#combobox option:selected").text());

简单明了。它将输入值设置为#combobox中所选元素的文本值。当然,您需要更新id元素以匹配您的个人项目或页面。

这是在上下文中:

(function($) {
    $.widget("ui.combobox", {
        _create: function() {
            var self = this;
            var select = this.element.hide();
            var input = $("<input>")
                .insertAfter(select)
                .autocomplete({
                    source: function(request, response) {
                        var matcher = new RegExp(request.term, "i");
                        response(select.children("option").map(function() {
                            var text = $(this).text();
                            if (this.value && (!request.term || matcher.test(text)))
                                return {
                                    id: this.value,
                                    label: text.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"),
                                    value: text
                                };
                        }));
                    },
                    delay: 0,
                    change: function(event, ui) {
                        if (!ui.item) {
                            // remove invalid value, as it didn't match anything
                            $(this).val("");
                            return false;
                        }
                        select.val(ui.item.id);
                        self._trigger("selected", event, {
                            item: select.find("[value='" + ui.item.id + "']")
                        });

                    },
                    minLength: 0
                })
                .addClass("ui-widget ui-widget-content ui-corner-left");



            // This line added to set default value of the combobox
            input.val( $("#combobox option:selected").text());





            $("<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;
                }
                // pass empty string as value to search for, displaying all results
                input.autocomplete("search", "");
                input.focus();
            });
        }
    });

})(jQuery);

答案 1 :(得分:19)

基于Mathieu Steele answer,而不是使用此:

input.val( $("#combobox option:selected").text());

我用这个:

input.val( $(select).find("option:selected").text());

Widget现在可以重复使用并且DRY:)

答案 2 :(得分:2)

答案#1非常接近,但如果要保持函数通用,则无法对元素ID进行硬编码。添加此行,享受!

input.val(jQuery("#"+select.attr("id")+" :selected").text() );

答案 3 :(得分:2)

您可以通过编辑自动完成符的以下语句来实现此目的:

value = selected.val() ? selected.text() : "Select Institution";

答案 4 :(得分:1)

我已经调整了这里的响应,使用组合框已经定义的select变量来查找所选的选项并使用它。这意味着它是通用的,你已经定义了组合框的元素(使用id,类或选择器),并且也适用于多个元素。

input.val(select.find("option:selected").text());

希望这有助于某人!

答案 5 :(得分:1)

将方法添加到jquery组合框脚本

setValue: function(o) {            
    $(this.element).val(o);
    $(this.input).val($(this.element).find("option:selected").text());            
}

答案 6 :(得分:0)

function setAutoCompleteCombo(id,value,display) {
    if($(id+"[value="+value+"]").text().localeCompare("")==0){
        $("<option value='"+value+"'>"+display+"</option>").appendTo($(id));
    }
    $(id).val(value);
    $(id).next().val($(id+" :selected").text());
}

我通过在初始页面或运行时调用此函数来解决它。例如:

setAutoCompleteCombo('#frmData select#select_id',option_value,option_text);

答案 7 :(得分:0)

在初始化后,调用option方法设置框的值。

$('#combo').autocomplete( "option" , optionName , [value] )

答案 8 :(得分:0)

答案 9 :(得分:0)

input.val( $(select).children("option:selected").text());

答案 10 :(得分:0)

我使用下面的代码行,只是另一种方法来实现相同的结果:)

$('option:selected', this.element).text()

答案 11 :(得分:0)

我的答案适用于我的jquery UI组合框的实现。在代码中间的某处是:

.val(value)

我把它改为:

.val(select.val())

和presto,出现了底层文本框的初始值。在我看来这应该是默认功能,但我知道什么?

答案 12 :(得分:0)

在“this._on( this.input, {”行

之前添加以下一行代码
this.input[0].defaultValue = value;

在自动完成组合框脚本中创建代码后。  您也可以使用html的重置按钮重置。

答案 13 :(得分:0)

我难以理解这个错误,并且无论我编码什么(可能在3个小时内)都无法修复OnLoad事件。最后幸运的是,我浏览了http://www.onemoretake.com/2011/04/17/a-better-jquery-ui-combo-box/网页(感谢@Dan解决我头痛的问题)并看到真正缺失的部分不在“OnLoad”上,关于ui定义功能本身。官方Jquery Ui网页上的标准定义功能不包含以编程方式选择选项。

这是应该添加到定义函数的函数:

//allows programmatic selection of combo using the option value
        setValue: function (value) {
            var $input = this.input;
            $("option", this.element).each(function () {
                if ($(this).val() == value) {
                    this.selected = true;
                    $input.val(this.text);
                    return false;
                }
            });
        }

我还制作了另一个功能来通过选项文本而不是选项值

来改变选择
//allows programmatic selection of combo using the option text
            setValueText: function (valueText) {
                var $input = this.input;
                var selectedText;                   
                $("option", this.element).each(function () {
                    if ($(this).text() == valueText) {
                        this.selected = true;
                        $input.val(this.text);                                                    
                        return false;
                    }
                });                        
            }

您可以在OnLoad或其他功能上使用这些功能:

$("#yourComboBoxID").combobox("setValue", "Your Option Value");

$("#yourComboBoxID").combobox("setValueText", "Your Option Text");