自动完成组合框选择的值

时间:2012-10-31 18:10:19

标签: jquery

我在从autocomplete-combobox jquery小部件中获取所选值时遇到问题。

虽然我一直在改变一些东西,但最初的代码演示是this。 根据代码,写入/验证的值应存储在ui.item.option但似乎我无法访问它并将其存储在标签/隐藏字段中以供以后在代码隐藏时使用。

<script type="text/javascript">
$(document).ready(
    function() {
        $('select[name=combobox]').change(
        function(){
            var newText = $('ui.item.option', this).text();
            $('#MyLabel').text(newText);
        }
    );
}
);
</script>

combobox是aspx页面中值列表的id /名称

它没有用,有什么帮助吗?感谢。

修改

这是列出的项目(使用演示示例)

<select id="combobox" name="combobox">
    <option value="">Select one...</option>
    <option value="ActionScript">ActionScript</option>
    <option value="AppleScript">AppleScript</option>
    <option value="Asp">Asp</option>
    <option value="BASIC">BASIC</option>
    <option value="C">C</option>
    <option value="C++">C++</option>
    <option value="Clojure">Clojure</option>
    <option value="COBOL">COBOL</option>
    <option value="ColdFusion">ColdFusion</option>
    <option value="Erlang">Erlang</option>
    <option value="Fortran">Fortran</option>
    <option value="Groovy">Groovy</option>
    <option value="Haskell">Haskell</option>
    <option value="Java">Java</option>
    <option value="JavaScript">JavaScript</option>
    <option value="Lisp">Lisp</option>
    <option value="Perl">Perl</option>
    <option value="PHP">PHP</option>
    <option value="Python">Python</option>
    <option value="Ruby">Ruby</option>
    <option value="Scala">Scala</option>
    <option value="Scheme">Scheme</option>
</select>

1 个答案:

答案 0 :(得分:1)

不要使用JS事件更改。创建自动完成时设置UI事件:

$('select[name=combobox]').autocomplete({
   change : function(event, ui){
             $('#MyLabel').text(ui.item.option);
            }
});

我现在看到了。我不确定这是最好的例子,但你的选择:) 你需要创建一个widget事件并调用它(我只给你一小部分演示代码,因为它太大了):

为select:

创建默认事件
$.widget( "ui.combobox", {
            select : function(event, ui){ alert (ui.item.value);},
            _create: function() {

如果定义了事件,请尝试调用它:

select: function( event, ui ) {
                            if(that.options.select != null){
                                that.options.select(event, ui);
                            }
                            ui.item.option.selected = true;
                            that._trigger( "selected", event, {
                                item: ui.item.option
                            });
                        },

在默认选择方法上创建组合框时:

$( "#combobox" ).combobox({select : function(event, ui){ $('#MyLabel').text(ui.item.value); }});

试试这个:)

编辑//

查看完整代码。它对我有用:

<script>
    (function( $ ) {
        $.widget( "ui.combobox", {
            select : function(event, ui){ alert (ui.item.value);},
            _create: function() {
                var input,
                    that = this,
                    select = this.element.hide(),
                    selected = select.children( ":selected" ),
                    value = selected.val() ? selected.text() : "",
                    wrapper = this.wrapper = $( "<span>" )
                        .addClass( "ui-combobox" )
                        .insertAfter( select );

                function removeIfInvalid(element) {
                    var value = $( element ).val(),
                        matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( value ) + "$", "i" ),
                        valid = false;
                    select.children( "option" ).each(function() {
                        if ( $( this ).text().match( matcher ) ) {
                            this.selected = valid = true;
                            return false;
                        }
                    });
                    if ( !valid ) {
                        // remove invalid value, as it didn't match anything
                        $( element )
                            .val( "" )
                            .attr( "title", value + " didn't match any item" )
                            .tooltip( "open" );
                        select.val( "" );
                        setTimeout(function() {
                            input.tooltip( "close" ).attr( "title", "" );
                        }, 2500 );
                        input.data( "autocomplete" ).term = "";
                        return false;
                    }
                }

                input = $( "<input>" )
                    .appendTo( wrapper )
                    .val( value )
                    .attr( "title", "" )
                    .addClass( "ui-state-default ui-combobox-input" )
                    .autocomplete({
                        delay: 0,
                        minLength: 0,
                        source: function( request, response ) {
                            var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
                            response( select.children( "option" ).map(function() {
                                var text = $( this ).text();
                                if ( this.value && ( !request.term || matcher.test(text) ) )
                                    return {
                                        label: text.replace(
                                            new RegExp(
                                                "(?![^&;]+;)(?!<[^<>]*)(" +
                                                $.ui.autocomplete.escapeRegex(request.term) +
                                                ")(?![^<>]*>)(?![^&;]+;)", "gi"
                                            ), "<strong>$1</strong>" ),
                                        value: text,
                                        option: this
                                    };
                            }) );
                        },
                        select: function( event, ui ) {
                        if(that.options.select != null){
                            that.options.select(event, ui);
                            }
                            ui.item.option.selected = true;
                            that._trigger( "selected", event, {
                                item: ui.item.option
                            });
                        },
                        change: function( event, ui ) {                         
                            if ( !ui.item )
                                return removeIfInvalid( this );

                        }
                    })
                    .addClass( "ui-widget ui-widget-content ui-corner-left" );

                input.data( "autocomplete" )._renderItem = function( ul, item ) {
                    return $( "<li>" )
                        .data( "item.autocomplete", item )
                        .append( "<a>" + item.label + "</a>" )
                        .appendTo( ul );
                };

                $( "<a>" )
                    .attr( "tabIndex", -1 )
                    .attr( "title", "Show All Items" )
                    .tooltip()
                    .appendTo( wrapper )
                    .button({
                        icons: {
                            primary: "ui-icon-triangle-1-s"
                        },
                        text: false
                    })
                    .removeClass( "ui-corner-all" )
                    .addClass( "ui-corner-right ui-combobox-toggle" )
                    .click(function() {
                        // close if already visible
                        if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
                            input.autocomplete( "close" );
                            removeIfInvalid( input );
                            return;
                        }

                        // work around a bug (likely same cause as #5265)
                        $( this ).blur();

                        // pass empty string as value to search for, displaying all results
                        input.autocomplete( "search", "" );
                        input.focus();
                    });

                    input
                        .tooltip({
                            position: {
                                of: this.button
                            },
                            tooltipClass: "ui-state-highlight"
                        });
            },

            destroy: function() {
                this.wrapper.remove();
                this.element.show();
                $.Widget.prototype.destroy.call( this );
            }
        });
    })( jQuery );

    $(function() {
        $( "#combobox" ).combobox({select : function(event, ui){ alert(ui.item.value); }});
        $( "#toggle" ).click(function() {
            $( "#combobox" ).toggle();
        });
    });
    </script>