Событие выбора автозаполнения Jquery UI не работает в Chrome 74 - PullRequest
1 голос
/ 10 мая 2019

Я использую автозаполнение пользовательского интерфейса Jquery, при выборе другого раскрывающегося списка ajax получает данные JSON для загрузки в раскрывающемся меню автозаполнения (#styleid), но параметры не доступны для выбора в Chrome. Мой хром-версон - 74.0.3729.131. Пока этот код работает в Firefox.

Мой код:

       var items = obj.style_options ;
        $( "#styleid" ).autocomplete({
                minLength: 0,
                source: function( request, response ) {
                    var string = $( "#styleid" ).val().replace(/,\s*$/, "");
                    var removeItem = string.split(',');

                    if(removeItem.length>0){
                        for(var k=0;k<removeItem.length;k++){
                            var cmpVal = $.trim(removeItem[k]);
                            if(cmpVal!=''){
                            items = jQuery.grep(items, function(value) { 

                              return value != cmpVal; 
                            }); 
                            }
                        }

                        //items = items.filter( function( el ) {
                            //  return !removeItem.includes( el );
                            //} );
                    }
                    //console.log(items);
                  response( $.ui.autocomplete.filter(
                    items, extractLast( request.term ) ) );
                },
                select: function( event, ui ) {

                    console.log(ui.item.value);
                    var terms = split( this.value );
                    terms.pop();
                    terms.push( ui.item.value );
                    terms.push( "" );

                    this.value = terms.join( ", " );

                  ///


                  ////
                  return false;
                },
                focus: function() {
                    $(this).data("uiAutocomplete").search($(this).val());
                }
              }).focus(function(){            
                    // The following works only once.
                    // $(this).trigger('keydown.autocomplete');
                    // As suggested by digitalPBK, works multiple times
                    // $(this).data("autocomplete").search($(this).val());
                    // As noted by Jonny in his answer, with newer versions use uiAutocomplete
                    $(this).data("uiAutocomplete").search($(this).val());
                });;`

1 Ответ

0 голосов
/ 16 мая 2019

Посоветовал бы следующий код:

var items = obj.style_options;
$("#styleid").autocomplete({
  minLength: 0,
  source: function(request, response) {
    var string = $("#styleid").val().replace(/,\s*$/, "");
    var removeItem = string.split(',');

    if (removeItem.length > 0) {
      for (var k = 0; k < removeItem.length; k++) {
        var cmpVal = $.trim(removeItem[k]);
        if (cmpVal != '') {
          items = jQuery.grep(items, function(value) {

            return value != cmpVal;
          });
        }
      }
    }
    response($.ui.autocomplete.filter(items, extractLast(request.term)));
  },
  select: function(event, ui) {
    var terms = split(this.value);
    terms.pop();
    terms.push(ui.item.value);
    terms.push("");

    this.value = terms.join(", ");

    return false;
  },
  focus: function() {
    // prevent value inserted on focus
    return false;
  }
}).focus(function() {
  $(this).data("uiAutocomplete").search($(this).val());
});

Пожалуйста, оставьте отзыв: http://api.jqueryui.com/autocomplete/#event-focus против https://api.jquery.com/focus/

Вы использовали focus обратный вызов внутри автозаполнения. Это срабатывает, когда фокус находится на элементе результата. Если вы хотите инициировать событие, когда базовый элемент получает фокус, используйте .focus() в качестве функции обратного вызова.

Надеюсь, это поможет.

...