我最近将jQuery升级到1.4.2,将jQuery-UI升级到1.8.2。错误与否,当我尝试将新的ui-autocomplete(不是来自bassistance.de的旧版本)与jeditable结合起来时,我开始拉头发。
当我编辑页面中的字段(通常是具有唯一ID的范围)时,用户开始键入某人的名称,并设法在jeditable生成的输入字段中显示标签名称+姓氏。 我的问题是我的数据库中的某些联系人具有相同的名称+姓氏。因此,发送结果“姓名+姓氏”将不允许我获得正确的联系。相反,我需要发送与该联系人关联的ID。
是否有人设法创建涉及最新ui-autocomplete的新自定义输入,其中ID将存储在隐藏输入中,然后在标签显示在可见输入字段中时发布到处理脚本?
附加问题:任何人都可以确认使用ui-autocomplete绝对不可能在输入字段中显示标签并且id存储在相同输入的值中吗?隐藏的输入总是必要的吗?
非常感谢提前
答案 0 :(得分:5)
经过几天的尝试(我的javascript技能非常糟糕),我设法使用Pete Freitag的代码获得了一些工作(见上面的评论)。
代码可能很难看(这就是我向你们提交的原因,欢迎提出任何建设性意见。)
$.editable.addInputType('autocompleteCON', {
element : $.editable.types.text.element,
plugin : function(settings, original) {
$('input', this).each(function() {
/* change name of original input */
$(this).attr('name', 'cellvalue_autocomplete_label');
$(this).attr('id','parentInput');
/* create new hidden input with name of orig input */
$(this).after('<input type="hidden" name="cellvalue" id="cellvalue_autocomplete_hidden" />');
$(this).autocomplete({
source: "tab_autocomplete.php?cat=CON",
change: function(event, ui) {
if (!ui.item) {
$(this).val('');
$('#cellvalue_autocomplete_hidden').val('');
return false;
}
},
select: function(event, ui) {
$('#cellvalue_autocomplete_hidden').val(ui.item.value);
$('#parentInput').val(ui.item.label);
return false;
}
});
// alert(result);
}).data( "autocomplete" )._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + " <span style='font-size:0.8em;font-weight:normal;max-width:650px;'>(" + item.desc + ")</span></a>" )
.appendTo( ul );
};
},
submit: function (settings, original) {
var value = $('#cellvalue_autocomplete_hidden').val();
$('input', this).val(value);
}
});
$(".autocompleteCON_con").editable("update.php", {
id : 'cellid',
name : 'cellvalue',
event : 'dblclick',
submitdata : {id: "<?php echo $id_contact; ?>"},
type : 'autocompleteCON',
indicator : 'Saving...',
select : true,
tooltip : 'Double click to edit...',
placeholder : '<b style="color:#AAA">Edit</b>',
style : 'display: inline',
height : '25px',
width : '150px',
onblur : 'ignore',
submit : 'Save',
cancel : 'Cancel',
callback : function(value, settings) {
// some function
}
});