如何从autoselect combbox 1

时间:2016-03-01 07:52:56

标签: jquery combobox

我正在使用jquery autoselect组合框插件,并且可能有答案可以在其onchange事件中获得第一个autoselect组合框的值,但它们不适用于同一页面上的两个组合框。任何帮助将不胜感激。这是我的代码

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>jQuery UI Autocomplete - Combobox</title>
        <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
        <script src="//code.jquery.com/jquery-1.10.2.js"></script>
        <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
        <link rel="stylesheet" href="/resources/demos/style.css">
        <style>
            .custom-combobox {
                position: relative;
                display: inline-block;
            }

            .custom-combobox-toggle {
                position: absolute;
                top: 0;
                bottom: 0;
                margin-left: -1px;
                padding: 0;
            }

            .custom-combobox-input {
                margin: 0;
                padding: 5px 10px;
            }
        </style>
        <script>
            (function( $ ) {
                $.widget( "custom.combobox", {
                    _create: function() {
                        this.wrapper = $( "<span>" )
                            .addClass( "custom-combobox" )
                            .insertAfter( this.element );
                        this.element.hide();
                        this._createAutocomplete();
                        this._createShowAllButton();
                    },
                    _createAutocomplete: function() {
                        var selected = this.element.children( ":selected" ),
                            value = selected.val() ? selected.text() : "";
                        this.input = $( "<input>" ).
                            appendTo( this.wrapper ).val( value ).
                            attr( "title", "" )
                            .addClass( "custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left" )
                            .autocomplete({
                                delay: 0,
                                minLength: 0,
                                source: $.proxy( this, "_source" )
                            })
                            .tooltip({
                                tooltipClass: "ui-state-highlight"
                            });
                        this._on( this.input, {
                            autocompleteselect: function( event, ui ) {
                                alert("the select event has fired!");
                                ui.item.option.selected = true;
                                this._trigger( "select", event, {
                                    item: ui.item.option
                                });
                                autocompleteselect.trigger("change");
                            },
                            change: function( event, ui ) {
                                if ( !ui.item ) {
                                    var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
                                        valid = false;
                                    autocompleteselect.children( "option" ).each(function() {
                                        if ( $( this ).text().match( matcher ) ) {
                                            this.selected = valid = true;
                                            return false;
                                        }
                                    });
                                }
                            }
                            //autocompletechange: "_removeIfInvalid"
                        });
                    },
                    _createShowAllButton: function() {
                        var input = this.input,
                            wasOpen = false;
                        $( "<a>" )
                            .attr( "tabIndex", -1 )
                            .attr( "title", "Show All Items" )
                            .tooltip()
                            .appendTo( this.wrapper )
                            .button({
                                icons: {
                                    primary: "ui-icon-triangle-1-s"
                                },
                                text: false
                            })
                            .removeClass( "ui-corner-all" )
                            .addClass( "custom-combobox-toggle ui-corner-right" )
                            .mousedown(function() {
                                wasOpen = input.autocomplete( "widget" ).is( ":visible" );
                            })
                            .click(function() {
                                input.focus();
                                // Close if already visible
                                if ( wasOpen ) {
                                    return;
                                }
                                // Pass empty string as value to search for, displaying all results
                                input.autocomplete( "search", "" );
                            });
                    },
                    _source: function( request, response ){
                    var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
                response( this.element.children( "option" ).map(function() {
                    var text = $( this ).text();
                    if ( this.value && ( !request.term || matcher.test(text) ) )
                        return {
                            label: text,
                            value: text,
                            option: this
                        };
                }) );
            },
            _removeIfInvalid: function( event, ui ) {
                // Selected an item, nothing to do
                if ( ui.item ) {
                    return;
                }
                // Search for a match (case-insensitive)
                var value = this.input.val(),
                    valueLowerCase = value.toLowerCase(),
                    valid = false;
                this.element.children( "option" ).each(function() {
                    if ( $( this ).text().toLowerCase() === valueLowerCase ) {
                        this.selected = valid = true;
                        return false;
                    }
                });
                // Found a match, nothing to do
                if ( valid ) {
                    return;
                }
                // Remove invalid value
                this.input.val( "" )
                    .attr( "title", value + " didn't match any item" )
                    .tooltip( "open" );
                this.element.val( "" );
                this._delay(function() {
                    this.input.tooltip( "close" ).attr( "title", "" );
                }, 2500 );
                this.input.autocomplete( "instance" ).term = "";
            },
            _destroy: function() {
                this.wrapper.remove();
                this.element.show();
            }
            });
            })( jQuery );
            $(function() {
                $( "#combobox" ).combobox({ change: function() { alert("changed"); }});
                $( "#combobox_retailer" ).combobox();
                $( "#toggle" ).click(function() {
                    $( "#combobox" ).toggle();
                });
                $("#combobox").change(function() {
                    alert(this.value);
                });
            });
        </script>
    </head>
    <body>
        <div class="ui-widget">
            <label>Your preferred programming language: </label>
            <select id="combobox" name="combobox1">
                <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="JavaScript">JavaScript</option>
                <option value="Lisp">Lisp</option>
            </select>
        </div>
        <div class="ui-widget">
            <label>Another </label>
            <select id="combobox2">
                <option value="">Select one...</option>
            </select>
        </div>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

替换

autocompleteselect.trigger("change");

this._trigger("change");