выбор клавиатуры для пользовательского выпадающего списка

#javascript #jquery #knockout.js

#javascript #jquery #knockout.js

Вопрос:

Я создал пользовательский плагин выпадающего списка jquery, который, похоже, хорошо работает на настольных компьютерах и мобильных устройствах.

Однако на мобильных устройствах мы используем собственное поведение html, а на настольных компьютерах мы создаем выпадающий список так, как нам нужно, с помощью ul li, а затем добавляем его к тегу select.

Но я не могу сделать какой-либо выбор с клавиатуры, который мы обычно можем сделать из собственного выпадающего списка по умолчанию. Есть ли какое-либо решение? кто-нибудь может мне помочь, как мне это сделать с помощью keyCode или есть ли какое-либо решение?

 alphaDropdown: function(){
       (function(jQuery){
          jQuery.fn.AlphaDropdown = function( configurations ){
        
            var defaultConfigurations = {
              disabledFirst: false
            };
        
            var extendedconfigurations = jQuery.extend(defaultConfigurations, configurations || {});
        
            function setBackData( ){
              jQuery('.selectr-desktop-custom').each(function(){
                var selectedValue = jQuery(this).removeClass('active').find('select').eq(0).val();
                var selectedIndex = jQuery(this).removeClass('active').find('select').eq(0)[0].selectedIndex;
                if( !selectedValue || selectedValue == ""){
                    var dropdown = jQuery(this).find('select').eq(0)[0];
                    var _index = dropdown.selectedIndex;
                    if( _index >= 0 ){
                        selectedValue = dropdown.options[_index].innerText;
                        selectedIndex = _index;
                    }
                }
                if ( selectedIndex != -1 ) {
                  var moveBy = -(selectedIndex * 40), movewithY = 'translateY(' moveBy 'px)';
                  jQuery(this).find('ul').eq(0).css({
                    transform: movewithY
                  });
                };        
              });
            }
            
            jQuery(this).each(function(){
                if( jQuery(this).parents('.selectr-desktop-custom').length > 0 ){
                    jQuery(this).parents('.selectr-desktop-custom').children('ul').remove();
                    jQuery(this).unwrap('.selectr-desktop-custom');
                }
                var preselectedvalue = jQuery(this).val() ;
                if( !preselectedvalue || preselectedvalue == ""){
                    var dropdown = jQuery(this).eq(0)[0];
                    var _index = dropdown.selectedIndex;
                    if( _index >= 0 ){
                        preselectedvalue = dropdown.options[_index].innerText;
                    }
                }
                var list = "<ul>"
                jQuery(this).wrap("<div class='selectr-desktop-custom' tabindex='0'></div>");        
                jQuery(this).find('option').each(function(){
                  var currentValue = jQuery(this).val() amp;amp; jQuery(this).val().trim() != ""?jQuery(this).val():jQuery(this).text();
                  if( jQuery(this).index() == 0 ){
                    if( extendedconfigurations.disabledFirst amp;amp; currentValue == preselectedvalue ){
                      list  = "<li class='disabled active drop' alpha-value='"   currentValue  "'>"   jQuery(this).text()   "</li>"; 
                    }else if( extendedconfigurations.disabledFirst amp;amp; currentValue != preselectedvalue ){
                      list  = "<li class='disabled drop' alpha-value='"   currentValue "'>"   jQuery(this).text()   "</li>";
                    }else if( !extendedconfigurations.disabledFirst amp;amp; currentValue == preselectedvalue ){
                      list  = "<li class='active' alpha-value='"   currentValue  "'>"   jQuery(this).text()   "</li>"; 
                    }
                    else{
                      list  = "<li alpha-value='"   currentValue  "'>"   jQuery(this).text()   "</li>"; 
                    }
                  }
                  else{
                    if( currentValue == preselectedvalue ){
                      list  = "<li class='active' alpha-value='"   currentValue  "'>"  jQuery(this).text()  "</li>";
                    }else{
                      list  = "<li alpha-value='"   currentValue  "'>"  jQuery(this).text()  "</li>";
                    }                    
                  }
                });        
                list  = "</ul>";        
                jQuery(this).before(list);

                jQuery(this).parents('.selectr-desktop-custom').click(function(e){
                    e.stopPropagation();
                    jQuery('.selectr-desktop-custom').removeClass('active');
                    jQuery(this).addClass('active'); 
                    jQuery(this).find('ul').eq(0).css('transform','translateY(0)'); 
                }).find('ul').eq(0).find('li').click(function(e){
                    var _index = jQuery(this).index();
                    var moveBy = -(_index * 40), movewithY = 'translateY(' moveBy 'px)';
                    var ul = jQuery(this).parent();
                    var dropdown = ul.parent().find('select').eq(0);
                    jQuery(this).parent().css({
                        transform: movewithY
                    });
                    var seletedValue = jQuery(this).attr('alpha-value') || null;
                    if( seletedValue ){
                       dropdown.val(seletedValue).find('option').each(function(){
                            if( jQuery(this).text() === seletedValue || jQuery(this).val() === seletedValue ){
                                jQuery(this).attr('selected','selected');
                            }else{
                                jQuery(this).attr('selected',null);
                            }
                        });
                        dropdown[0].selectedIndex = _index;
                        dropdown.trigger('change');
                    }                    
                    jQuery(this).addClass('active').siblings().removeClass('active').closest('.selectr-desktop-custom').removeClass('active');
                    e.stopPropagation();
                    e.stopImmediatePropagation();
                    return false;
                });
                jQuery('body').click(function(e){
                    setBackData();
                });
            });
            setBackData();
            return this;
          }
        })($);
      }  

Комментарии:

1. Итак, существует ряд пользовательских выпадающих плагинов. Изучали ли вы, скажем, плагин jQuery UI «selectmenu», чтобы посмотреть, как они обрабатывают события клавиатуры?

2. Спасибо @James на самом деле у нас был выпадающий список. Мы должны сделать это в соответствии с этим, поэтому я переключился на создание пользовательского выпадающего списка. итак, есть ли в моем коде какое-либо решение, которым я могу манипулировать и достичь того, чего я хочу

3. Да, но это потребует от вас понимания событий на клавиатуре и желаемого эффекта, когда они произойдут. Вот почему я предлагаю изучить очень похожий пользовательский выпадающий список. Ссылка на источник

4. Спасибо @James, если я перейду по предоставленной вами ссылке, мне придется изменить свой пользовательский код, и это займет время. я работал над событиями клавиатуры ранее, но сейчас немного запутался, что делать с кодами клавиш клавиатуры, поэтому мне нужна помощь в этом