jquery 插件 jquery-manifest 在定义values参数为数组时只能输出最后一个单元的值
插件作者已经近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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论