jquery 插件 jquery-manifest 在定义values参数为数组时只能输出最后一个单元的值

发布于 2022-09-04 23:18:27 字数 3829 浏览 28 评论 0

插件作者已经近2两年没有维护过代码了,项目中有用这个插件的需求即多项输入,如果这个问题解决不了的希望大家推荐个类似的插件,能够初始化数值支持自定义分割符的即可

$("#value1").manifest({
        separator:[';',',']
//        ,values: ['da']  // 单项目数组没有问题
        ,values: ['xiaoa','afds'] // 这个部分出现了问题,初始化后只有afds这一项出现
//        ,values: '大'    // 字符串初始化也没有问题
    });

图片描述

add: function (data, $mpItem, clearInputValue, initial) {
      var self = this,
          $input = self.$input,
          options = self.options,
          // If only a single item is being added, normalize to an array.
          values = $.isArray(data) ? data : [data],
          value,
          $item = $(),
          $remove = $(),
          $value = $(),
          // Called when deferred formatting callbacks complete.
          /* 出问题的代码部分开始 */
          /**
           * buildItem方法是实例化选项节点的函数
           * 三个参数分别是节点显示的内容,移除该节点的按钮内容,隐藏域的值(与节点显示内容一致)
           */ 
          buildItem = function(formatDisplay, formatRemove, formatValue) {
            // Format the HTML display of the item.
            $item.html(formatDisplay);
            // Format the HTML display of the remove icon.
            $remove.html(formatRemove);

            // Format the hidden value to be submitted for the item.
            $value.val(formatValue);

            // Append the remove link and hidden values after the display
            // elements of the item.
            // 经测试这一句代码每次追加的value都是初始化插件时values参数的最后一个元素
            $item.append($remove, $value);

            $.when(self._trigger('add', [value, $item, !!initial]))
             .then(function (add) {
               if (add !== false) {
               // 将节点追加至容器中
                 $item.appendTo(self.$list);

                   // Sometimes an 'onChange' event shouldn't be fired, like when
                   // initial values are added.
                   console.log($item);
                   if (!initial) {
                     self._trigger('change', ['add', value, $item]);
                 }
               }
             });
          };

      for (var i = 0, length = values.length; i < length; i++) {
        value = values[i];

        // Trim extra spaces, tabs, and newlines from the beginning and end of
        // the value if it's a string.
        if (typeof value === 'string') {
          value = $.trim(value);
        }

        // Don't add if the value is an empty string or object.
        if (!value || ($.isPlainObject(value) && $.isEmptyObject(value))) {
          continue;
        }

        $item = $('<li class="mf_item" role="option" aria-selected="false" />');
        $remove = $('<a href="#" class="mf_remove" title="Remove" />');
        $value = $('<input type="hidden" class="mf_value" />');

        if (options.valuesName) {
          $value.attr('name', options.valuesName + '[]');
        }
        // If no custom 'name' is set for the hidden input values, append
        // '_values[]' to the input name as the default.
        else {
          $value.attr('name', $input.attr('name') + '_values[]');
        }

        // Store the data with the item for easy access.
        $item.data('manifest', value);

        // Formatting callbacks support deferred responses to allow for ajax
        // and other asynchronous requests.
        // 这里调用了本方法内的buildItem函数
        $.when(options.formatDisplay.call($input, value, $item, $mpItem),
               options.formatRemove.call($input, $remove, $item),
               options.formatValue.call($input, value, $value, $item, $mpItem))
         .then(buildItem);
      }
      
      if (clearInputValue) {
        self._clearInputValue();
      }
    },
      /*出问题的代码结束*/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文