Select2 多个值将初始化时预填充的值加倍,并且仍然发送

Select2 multiple values doubles prepopulated values on init, and still sends

关于select2倍增值的问题很多,很多都没有公认的答案。

表面上一切看起来都很好,但是当我删除一个令牌时,它仍然在参数中发送它。

正在检查 input 的值(select2 正在隐藏)

初始化之前select2

$('#language_list').val() //=> "english spanish italian"

初始化后

$('#language_list').val() //=> "english spanish italian,english,spanish,italian"

// It's clearer what's going on like this.
// And I don't know if it's significant but tokenSeparators: [",", " "]
$("#user_language_list").select2("val") //=> ["english spanish italian", "english", "spanish", "italian"]

出现了很多问题,比如当表单在错误后重新填充时我会遇到

$('#language_list').val() //=> "english-spanish-italian english spanish italian,english,spanish,italian"

隐藏在我的 input 中,我必须在后端解决。

有效的方法是在将数据发送到 callback

之前清理值

您可能会认出这基本上是文档中的代码。

    initSelection: function (e, callback) {
      var tags = e.val().split(/, |,| /);

      for (var i = 0; i < tags.length; i++) {
        var tag = tags[i].trim();
        tags[i] = {id: tag, text: tag};
      }

      callback(tags);
    }

但你只需要清理 val

    initSelection: function (e, callback) {
      var tags = e.val().split(/, |,| /);
      e.val("")
      for (var i = 0; i < tags.length; i++) {
        var tag = tags[i].trim();
        tags[i] = {id: tag, text: tag};
      }

      callback(tags);
    }