使用jquery ui-autocomplete和jeditable向服务器发布值

时间:2010-08-10 05:30:01

标签: jquery jeditable jquery-ui-autocomplete

我最近将jQuery升级到1.4.2,将jQuery-UI升级到1.8.2。错误与否,当我尝试将新的ui-autocomplete(不是来自bassistance.de的旧版本)与jeditable结合起来时,我开始拉头发。

当我编辑页面中的字段(通常是具有唯一ID的范围)时,用户开始键入某人的名称,并设法在jeditable生成的输入字段中显示标签名称+姓氏。 我的问题是我的数据库中的某些联系人具有相同的名称+姓氏。因此,发送结果“姓名+姓氏”将不允许我获得正确的联系。相反,我需要发送与该联系人关联的ID。

是否有人设法创建涉及最新ui-autocomplete的新自定义输入,其中ID将存储在隐藏输入中,然后在标签显示在可见输入字段中时发布到处理脚本?

附加问题:任何人都可以确认使用ui-autocomplete绝对不可能在输入字段中显示标签并且id存储在相同输入的值中吗?隐藏的输入总是必要的吗?

非常感谢提前

1 个答案:

答案 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
            }   
});