我在我的项目中使用jeditable,我动态更新了许多不同类型的内容:text,textarea和select。
我需要一种新类型来满足我的一种需求:一种可以称为“selectmulti”的多选类型。
编辑字段“selectmulti”时,会出现一个选择列表,允许用户选择多个选项。保存将返回一个数组,update.php会将此数组存储在我的数据库中。
例如:
<div class='border'>
<span class='title'>Language: </span>
<span class='editableLang' id='contact_language'>
".$row['contact_language']."
</span>
</div>
和Javascript功能:
$('.editableLang').editable('update.php', {
data : '<?php print json_encode($tab_lang); ?>',
id : 'cellid',
name : 'cellvalue',
event : 'dblclick',
tooltip : 'Double click to edit...',
submitdata : {id: "<?php echo $id_contact; ?>"},
type : 'selectmulti',
style : 'display: inline',
submit : 'Save',
cancel : 'Cancel'
});
我无法弄清楚如何在数组中获取不同的值(在我的情况下'cellvalue'将是数组)并将其保存在数据库中。
非常感谢任何帮助或建议!
干杯
答案 0 :(得分:3)
$('.editable').editable('http://www.example.com/save.php', {
data : " {'E':'Letter E','F':'Letter F','G':'Letter G', 'selected':'F'}",
type : 'multiselect',
submit : 'OK'
});
答案 1 :(得分:2)
如果有兴趣,我的解决方案是在jsbin:http://jsbin.com/ixuye4/edit
答案 2 :(得分:2)
这对我有用!
$.editable.addInputType("multiselect", {
element: function (settings, original) {
var select = $('<select multiple="multiple" />');
if (settings.width != 'none') { select.width(settings.width); }
if (settings.size) { select.attr('size', settings.size); }
$(this).append(select);
return (select);
},
content: function (data, settings, original) {
/* If it is string assume it is json. */
if (String == data.constructor) {
eval('var json = ' + data);
} else {
/* Otherwise assume it is a hash already. */
var json = data;
}
for (var key in json) {
if (!json.hasOwnProperty(key)) {
continue;
}
if ('selected' == key) {
continue;
}
var option = $('<option />').val(key).append(json[key]);
$('select', this).append(option);
}
if ($(this).val() == json['selected'] ||
$(this).html() == $.trim(original.revert)) {
$(this).attr('selected', 'selected');
}
/* Loop option again to set selected. IE needed this... */
$('select', this).children().each(function () {
if (json.selected) {
var option = $(this);
$.each(json.selected, function (index, value) {
if (option.val() == value) {
option.attr('selected', 'selected');
}
});
} else {
if (original.revert.indexOf($(this).html()) != -1)
$(this).attr('selected', 'selected');
}
});
}
});
$('.editable').editable('http://www.example.com/save.php', {
data : " {'E':'Letter E','F':'Letter F','G':'Letter G', 'selected':'F'}",
type : 'select',
submit : 'OK'
});
答案 3 :(得分:0)
如果有人碰巧在寻找快速而肮脏的解决方案:
$.editable.addInputType('multi', {
element : function(settings, original) {
var select = $('<select multiple="multiple" />');
if (settings.width != 'none') { select.width(settings.width); }
if (settings.size) { select.attr('size', settings.size); }
$(this).append(select);
return (select);
},
content: function (data, settings, original) {
/* If it is string assume it is json. */
if (String == data.constructor) {
eval('var json = ' + data);
} else {
/* Otherwise assume it is a hash already. */
var json = data;
}
for (var key in json) {
if (!json.hasOwnProperty(key)) {
continue;
}
if ('selected' == key) {
continue;
}
var option = $('<option />').val(key).append(json[key]);
$('select', this).append(option);
}
}
});