2

我正在使用 jquery.tagsinput 并希望能够粘贴以逗号或空格分隔的电子邮件地址列表。使用类似https://github.com/xoxco/jQuery-Tags-Input/issues/22的东西,但在我按下 Enter 之前它不会添加它们 - 尝试触发 keypress Enter 事件但它不起作用。模糊事件也没有运气(如下所示)。有任何想法吗?

Flat-UI 标签基于这个库,我正在尝试实现非常相似的行为。

var tidyTags = function(e) {
  var tags = (e.tags).split(/[ ,]+/);
  var target = $(e.target);

  for (var i = 0, z = tags.length; i<z; i++) {
      var tag = $.trim(tags[i]);
      if (!target.tagExist(tag)) {
          target.addTag(tag);
      }
  }
  $('#' + target[0].id + '_tag').trigger('focus');

  //This doesn't work.
  target.blur();

};

$("#tagsinput").tagsInput({
    onAddTag : function(tag){
      if(tag.indexOf(',') > 0) {
          tidyTags({target: '#tagsinput', tags : tag});
      }
    },
});
4

3 回答 3

7

好的,终于想出了解决办法:

在这里演示

只需textbox在粘贴时添加一个监听器,不要onAddTag在初始化期间设置,只需给它一个简单的调用,如下所示:

$("#tagsinput").tagsInput();//Initialization

$("#tagsinput_tag").on('paste',function(e){
    var element=this;
    setTimeout(function () {
        var text = $(element).val();
        var target=$("#tagsinput");
        var tags = (text).split(/[ ,]+/);
        for (var i = 0, z = tags.length; i<z; i++) {
              var tag = $.trim(tags[i]);
              if (!target.tagExist(tag)) {
                    target.addTag(tag);
              }
              else
              {
                  $("#tagsinput_tag").val('');
              }
         }
    }, 0);
});

需要注意的几点:

  • paste仅当在 Firefox 中选择文本时才会触发该方法
  • tagsinput将隐藏您的#tagsinput文本框并添加自己的input文本框,因此您需要paste在文本框上调用事件,#tagsinput_tag元素的结构将如下图所示:结构图
于 2015-06-03T05:00:31.253 回答
0

非常感谢这个鼓舞人心的解决方案!

我对上面的代码有一些问题。我正在使用并且不想通过 ID 访问元素。

以下是声明中对我有用的内容,以防有人感兴趣:

link: function(scope, el, attr){

    /* initializing element */
    var $el = angular.element(el);
    $el.tagsinput({...}); //<-- initialize as desired

    /* getting the "_tag" input  */
    var $elTag = $el.tagsinput('input');

    /* attaching event to "_tag" input */
    $elTag.on('paste', function (e) {
        var element = this;
        setTimeout(function () {
            var text = $(element).val();
            var target = $el;
            $elTag.val(''); // <--- removes the pasted value containing the ","
            var tags = (text).split(/[ ,]+/);
            for (var i = 0, z = tags.length; i < z; i++) {
                var tag = $.trim(tags[i]);
                if(target.tagsinput('items').indexOf(tag) < 0){ // <-- I got "'tagExist' not a function" error
                    target.tagsinput('add',tag);
                }
            }
        }, 0);
    });
}
于 2017-11-17T16:03:23.970 回答
0

首先你应该导入这个文件https://github.com/xoxco/jQuery-Tags-Input/tree/master/src

这是我们的脚本代码。

 $(function () {
        $("#EditorInputs").val($("#Editors").val());
        $('#EditorInputs').tagsInput({
            'height': '50px',
            'width': 'auto',
            'defaultText': 'Editor',
            'removeWithBackspace': true,
            'delimiter': [','],
            'onChange': function () {
                $("#Editors").val($('#EditorInputs').val());
            }
        });
    });

如果您使用的是 MVC

 <div class="form-group">
            @Html.LabelFor(m => m.Editors, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.HiddenFor(m => m.Editors)
                <input id="EditorInputs" value="" />
                @Html.ValidationMessageFor(m => m.Editors, "", new { @class = "text-danger" })
            </div>
        </div>

输出

于 2017-12-08T12:05:11.130 回答