1

最近、jQuery を 1.4.2 に、jQuery-UI を 1.8.2 にアップグレードしました。間違いであろうとなかろうと、新しい ui-autocomplete (bassistance.de の古いものではない) と jeditable を組み合わせようとしたとき、私は髪を引っ張り始めました。

ページのフィールド (通常は一意の ID を持つスパン) を編集すると、ユーザーが誰かの名前を入力し始め、jeditable によって生成された入力フィールドにラベル名と姓を表示できます。私の問題は、DB 内の一部の連絡先が同じ名前と姓を持っていることです。そのため、「名前 + 姓」という結果を送信しても、正しい連絡先を取得できません。代わりに、その連絡先に関連付けられた ID を送信する必要があります。

ラベルが表示されている入力フィールドに表示されている間、ID が非表示の入力に保存され、処理スクリプトに投稿される最新の ui-autocomplete を含む新しいカスタム入力を作成できた人はいますか?

追加の質問: ラベルが入力フィールドに表示され、id が同じ入力の値に格納されている場合、ui-autocomplete を使用することは絶対に不可能であることを誰でも確認できますか? 隠し入力は常に必要ですよね?

よろしくお願いします

4

1 に答える 1

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
            }   
});
于 2010-08-13T00:30:39.910 に答える