jquery在Multi-select中选择了Shift选项?

时间:2014-09-09 11:58:45

标签: jquery jquery-chosen shift

我正在使用jQuery Chosen插件来实现自动完成功能。是否可以使用Shift +箭头键选择多个并突出显示多选中的选项。请在下面找到快照: enter image description here

任何帮助都会受到很多赞赏.. !!!

在chosen.jquery.js文件中,我添加了以下代码来实现shift + arrow键的实现。

Chosen.prototype.keydown_checker = function(evt) {
  var stroke, _ref1;

  stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
  this.search_field_scale();
  if (stroke !== 8 && this.pending_backstroke) {
    this.clear_backstroke();
  }
  switch (stroke) {
    case 8:
      this.backstroke_length = this.search_field.val().length;
      break;
    case 9:
      if (this.results_showing && !this.is_multiple) {
        this.result_select(evt);
      }
      this.mouse_on_container = false;
      break;
    case 13:
      evt.preventDefault();
      break;
    case 38:
      evt.preventDefault();
      this.keyup_arrow();
      break;
    case 40:
      evt.preventDefault();
      this.keydown_arrow();
      break;
    case 16:
        if (this.result_highlight) {
            high = this.result_highlight;
            this.result_select(evt);
        }
        break;
  }
}

1 个答案:

答案 0 :(得分:0)

我找到了解决方法...

在文件 Chosen.js 版本1.8.7

行:132

this.selected_elements = [];
this.holding_shift = false;

第475行:

    case 16:
      if (this.results_showing && this.is_multiple){ 
        this.holding_shift = true; 
      }
      break;

第526行:

    case 27:
      if (this.results_showing) {
        this.results_hide();
      }
      break;
    case 16:
      if (this.results_showing && this.is_multiple) { this.holding_shift = false; }
      break;
    case 9:
    case 17:
    case 18:
    case 38:
    case 40:
    case 91:
      break;

第1064行:

Chosen.prototype.search_results_mouseup = function(evt) {
  var target;
  target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();

  //Support Shift + Select
  if (this.holding_shift) {
    if (this.selected_elements.length < 1) {
        target.addClass("first-selected selected-result");
        this.selected_elements.push(target);
        true;
    } else {
        let selected = null;
        const direction = target.prevAll('.first-selected').length > 0 ? 'back' : 'forward';

        if (target.get(0) === this.selected_elements[0].get(0)) { return false; }

        if (direction === "forward") {
            selected = target.nextUntil(this.selected_elements[0], ':not(.result-selected)').addBack().add(this.selected_elements[0]);
        } else {
            selected = target.prevUntil(this.selected_elements[0], ':not(.result-selected)').addBack().add(this.selected_elements[0]);
        }

        selected.each((i, elem) => {
            this.result_highlight = $(elem);
            return this.result_select(evt);
        });

        this.selected_elements[0].removeClass("first-selected selected-result");
        this.selected_elements = [];
        this.holding_shift = false;
        selected = false;

        return this.search_field.focus();
    }
    }

  else if (target.length) {

第1209行:

 if (this.is_multiple && (!this.hide_results_on_select || (evt.metaKey || evt.ctrlKey || evt.shiftKey))) {
          if (evt.metaKey || evt.ctrlKey || evt.shiftKey) {
            this.winnow_results({

和文件 chosen.css

第239行:

.chosen-container .chosen-results li.highlighted, li.selected-result {

第330行:

  /*background-size: 100% 19px;
  background-repeat: repeat-x;*/

这就是所有人