允许使用selected.js多选的新值

tot*_*rds 48 jquery multiple-select jquery-chosen

我正在使用selected.js插件http://harvesthq.github.com/chosen/和jQuery来允许用户从select中选择多个选项.但是,我现在希望能够让他们创造尚未存在的价值 - 任何想法如何解决这个问题?

编辑:与SO自己的标签选择/创建栏类似的东西将接近我所追求的

最好不要更改或编辑插件,但如果需要,也可以.

代码:HTML:

<p>Select something</p>
<select name="theSelect[]" multiple="multiple">
    <option value="First Option">First Option</option>
    <option value="Second Option">Second Option</option>
</select>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

$(function(){
    $('select').chosen();
});
Run Code Online (Sandbox Code Playgroud)

因此,如果用户输入"第三选项",我想将其添加到列表中并将其选中.值和显示名称是/将是相同的,所以这不是一个问题

jef*_*dev 27

根据文档,您可以尝试这样做:

$('select').append('<option>test</option>');
$('select').trigger('liszt:updated');
Run Code Online (Sandbox Code Playgroud)

正如托尼在下面的评论中所说:

"从版本1.0开始,现在选择触发器:已更新".请参阅harvesthq.github.io/chosen/#change-update-events "

  • 从版本1.0开始,触发器现在被"选择:更新".见http://harvesthq.github.io/chosen/#change-update-events (4认同)
  • 将此标记为已接受,因为我通过使用文本框键入新值来解决问题,并在提交时使用这些命令进行相应的刷新选择 (3认同)
  • 这是难题的一部分,但我还需要的是当用户键入列表中尚未包含的内容时能够触发该难题。我现在正在研究源代码:( (2认同)

Gal*_*axy 19

我偶然发现了同样的想法.看起来它是一个非常受欢迎的功能请求,并且有几个叉实现了它.看起来它很快就会合并到主分支中.

+1这个特殊的拉动有魅力:https: //github.com/harvesthq/chosen/pull/166

你可以在这里查看Koenpunt的分支:https://github.com/koenpunt/chosen

  • 我对此有点困惑.现在我正在我网站的很多地方选择使用.如果我从最后一个链接获取源代码,然后替换我用于我的网站的源代码,它会工作吗?我的意思是,定期选择的更新是否反映在合并/分叉中? (2认同)

Ult*_*ion 11

这是我做的一个简单的方法:

$(".search-field").find("input").live( "keydown", function (evt) {
    var stroke;
    stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
    if (stroke == 9) { // 9 = tab key
        $('#tags').append('<option value="' + $(this).val() + '" selected="selected">' + $(this).val() + '</option>');
        $('#tags').trigger('chosen:updated');
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 大约三分之一的代码量.这对我来说是一个非常显着的进步. (5认同)
  • `_ref` 从哪里来? (2认同)

Sam*_*amo 10

我只是想解决同样的问题.我稍微修改了源代码.这是新的keyup_checker函数.看一下案例13:

AbstractChosen.prototype.keyup_checker = function(evt) {
  var stroke, _ref;
  stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
  this.search_field_scale();
  switch (stroke) {
    case 8:
      if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) {
        return this.keydown_backstroke();
      } else if (!this.pending_backstroke) {
        this.result_clear_highlight();
        return this.results_search();
      }
      break;
    case 13:
      evt.preventDefault();
      if (this.results_showing) {
        if (!this.is_multiple || this.result_highlight) {
          return this.result_select(evt);
        }  

        $(this.form_field).append('<option>' + $(evt.target).val() + '</option>');
        $(this.form_field).trigger('liszt:updated');
        this.result_highlight = this.search_results.find('li.active-result').last();
        return this.result_select(evt);
      } 
      break;
    case 27:
      if (this.results_showing) this.results_hide();
      return true;
    case 9:
    case 38:
    case 40:
    case 16:
    case 91:
    case 17:
      break;
    default:
      return this.results_search();
  }
};
Run Code Online (Sandbox Code Playgroud)


sk8*_* ツ 5

我知道这不是答案,而是另一种解决方案.

我正在寻找即时添加部分,并发现http://ivaynberg.github.com/select2/#tags提供了与选择+"其他东西"相同的东西,如"标记".