Как очистить значение по умолчанию в поле со списком автозаполнения?

0

При использовании плагина jQuery Autocomplete Combobox в этом ниже:

http://jqueryui.com/autocomplete/#combobox

Вы можете установить значение по умолчанию, используя это:

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

или добавление значения по умолчанию, например:

value = selected.val() ? selected.text() : "-Select an item-";

но кто-нибудь знает, как очистить значение по умолчанию при нажатии на поле со списком?

//<![CDATA[
$(window).load(function(){
    (function( $ ) {
         $.widget( "ui.combobox", {
             _create: function() {
                 var self = this,
                     select = this.element.hide(),
                     selected = select.children( ":selected" ),
                     value = selected.val() ? selected.text() : "";
                 var input = this.input = $( "<input>" )
                     .insertAfter( select )
                     .val( value )
                     .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 ) {
                             ui.item.option.selected = true;
                             self._trigger( "selected", event, {
                                 item: ui.item.option
                             });
                             select.trigger("change");
                         },
                         change: function( event, ui ) {
                             if ( !ui.item ) {
                                 var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "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
                                     $( this ).val( "" );
                                     select.val( "" );
                                     input.data( "autocomplete" ).term = "";
                                     return false;
                                 }
                             }
                         }
                     })
                     .addClass( "ui-widget ui-widget-content ui-corner-left" );

                                 // This line added to set default value of the combobox
                         input.val(jQuery("#"+select.attr("id")+" :selected").text() );

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

                 this.button = $( "<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;
                         }

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

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

     $(function() {
         $( "#contactID" ).combobox({ change: function() { alert("changed"); }});
         $("#contactID").change(function() {
           //  alert(this.value);
         });
     });
});//]]>
  • 2
    Попробуйте вместо этого использовать атрибут- placeholder .
  • 0
    @RicardoLohmann, например, пожалуйста?
Показать ещё 4 комментария

1 ответ

1
Лучший ответ

Добавьте .attr('placeholder', 'my placeholder text') в строку 11:

10 var input = this.input = $( "<input>" )
11    .attr('placeholder', 'my placeholder text') // ADD THIS
12    .insertAfter( select )
13    .val( value )

Также стоит отметить, что решение Ricardo Loman по- прежнему работает в коде выше.

  • 0
    это оно!!! Большое спасибо. Хотелось бы, чтобы был способ разделить очки. Рикардо заслуживает огромного уважения, как и вы. Большое спасибо вам обоим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню