Jquery Chosen: заполнить множественный выбор кнопкой Tab

http://harvesthq.github.com/chosen/

вот пример страницы, и на ней есть вход множественного выбора.

Когда я начинаю печатать, он выделяет варианты. В этот момент, когда я нажимаю кнопку Tab, фокус перемещается на другой ввод и оставляет предыдущий ввод пустым. Я хочу добавить новую опцию, когда пользователь начинает печатать, например, пользователь набрал «af», «Афганистан» выделен, пользователь нажимает кнопку вкладки, и необходимо добавить Афганистан.

Я пытался обработать нажатие клавиши табуляции и выполнить $(optionid).click() для имитации мыши или ввода выбора, но это не работает


person ysokolovsky    schedule 27.03.2013    source источник


Ответы (2)


Я пробовал все, что мог придумать, когда дело доходит до добавления обработчиков событий поверх Chosen, но безрезультатно. Я пробовал ловить нажатие табуляции и имитировать щелчки по выделенному элементу и имитировать нажатие Enter в поле ввода, но безрезультатно.

Однако я думаю, что если вы хотите взломать Избранного, вам потребуется лишь несколько очень незначительных изменений.

Первое изменение:

Chosen.prototype.keydown_checker = function(evt) {
    ...
    //Replace the existing "case 9:" with this:
    case 9: //tab
        if(!this.is_multiple){
            if (this.results_showing && !this.is_multiple) {
                this.result_select(evt);
            }
            this.mouse_on_container = false;          
        }
        else {
            evt.preventDefault();
        }
        break;
    ...
}

Второе изменение:

AbstractChosen.prototype.keyup_checker = function(evt) {
    ...
    case 9: //Simply add this above "case 13:" and remove "case 9:" from further down the switch statement
    case 13: //Enter
    ...
}

Редактировать: теперь я проверил это, используя их примерную страницу в комплекте, и, похоже, она работает. как предполагалось.

person Peter Herdenborg    schedule 27.03.2013
comment
В версии 1.5 мне нужно было изменить только case 9: if (this.results_showing) { this.result_select(evt); } this.mouse_on_container = false; break; - person Bob; 05.05.2016

Я сделал некоторые изменения и получил то, что хотел. спасибо, Питер Херденборг!

AbstractChosen.prototype.keyup_checker = function (evt) { ...
    ... 
    case 9:
        if (this.search_field.val().length != 0) {
              if (this.results_showing) return this.result_select(evt);
        }
        break;
    case 13:
    ...

и второй

Chosen.prototype.keydown_checker = function (evt) {
      case 9:
          if (!this.is_multiple) {
              if (this.results_showing && !this.is_multiple) {
                        this.result_select(evt);
                    }
              this.mouse_on_container = false;
          }
          else {
             if (this.search_field.val().length != 0) evt.preventDefault();
         }
         break;
person ysokolovsky    schedule 28.03.2013