Ajax 原型多自动完成

Ajax 原型多自动完成,ajax,autocomplete,prototypejs,Ajax,Autocomplete,Prototypejs,我正在尝试制作一个管理界面,在这里可以选择不同类型的模型,然后将它们保存为一个新对象 Event.observe($('modelSearch'),'focus',function(){ new Ajax.Autocompleter( 'modelSearch', 'autoCompleteModel', 'xxx', { paramName: "q", indicator: "makeWaitPic", parameters: "

我正在尝试制作一个管理界面,在这里可以选择不同类型的模型,然后将它们保存为一个新对象

Event.observe($('modelSearch'),'focus',function(){
    new Ajax.Autocompleter( 'modelSearch', 'autoCompleteModel', 'xxx',
    {
        paramName: "q",
        indicator: "makeWaitPic",
        parameters: "previusId=" + $( 'previusModelId' ).getValue(),
        afterUpdateElement: function( text, li )
            {
                if( li.id != '' )
                    $( 'modelId' ).value = <AjaxReturnValue>;
                else
                    $( 'modelSearch' ).value = '';
            }
    } );
});
Event.observe($('modelSearch'),'focus',function(){
新的Ajax.Autocompleter('modelSearch','autoCompleteModel','xxx',',
{
参数名称:“q”,
指标:“makeWaitPic”,
参数:“previusId=“+$('previusModelId').getValue(),
afterUpdateElement:函数(文本,li)
{
如果(li.id!='')
$('modelId')。值=;
其他的
$('modelSearch')。值='';
}
} );
});
我遇到的问题是,当我有一个依赖于另一个自动完成的自动完成时,我会遇到一个问题。第一个自动完成让您选择一个模型,并将选定的模型ID存储在一个隐藏的输入字段中。第二个auto complete正在使用此值,以便它知道应该在哪个DB表中查找

问题1:如果我在dom:load上创建两个自动完成,它们将在设置输入值之前读取输入值。因此,第二次自动完成将不起作用

问题2:如果我在观察:聚焦时创建自动完成,他们每次都会读取fresh值,但每次聚焦自动完成字段时也会创建多个实例

我是否可以以任何方式使自动完成在每次使用时读取输入值并仅初始化一次?或者,我可以在使用自动完成后,以任何方式销毁保存自动完成的对象,然后下次创建一个新对象吗


我如何解决这个问题,有什么想法吗?

我通过每次第一个值更改时创建一个新的输入元素来解决它,从而删除旧的输入和与之相关的自动完成对象。然后创建一个新的自动完成绑定到新的输入字段

if( $( 'previousModelId' ).getValue() != prevId ){
    $('modelSearch').remove();
    $('wrapperId').insert({'top': '<input type="text" id="modelSearch" name="modelSearch" size="30" title="search model here." />'});
    initModelSearch();
    prevId = $( 'previousModelId' ).getValue();
}
if($('previousModelId').getValue()!=PreviousId){
$('modelSearch').remove();
$('wrapperId')。插入({'top':'''});
initModelSearch();
previousModelId=$('previousModelId').getValue();
}

我通过每次第一个值更改时创建一个新的输入元素来解决这个问题,从而删除旧的输入和绑定到它的自动完成对象。然后创建一个新的自动完成绑定到新的输入字段

if( $( 'previousModelId' ).getValue() != prevId ){
    $('modelSearch').remove();
    $('wrapperId').insert({'top': '<input type="text" id="modelSearch" name="modelSearch" size="30" title="search model here." />'});
    initModelSearch();
    prevId = $( 'previousModelId' ).getValue();
}
if($('previousModelId').getValue()!=PreviousId){
$('modelSearch').remove();
$('wrapperId')。插入({'top':'''});
initModelSearch();
previousModelId=$('previousModelId').getValue();
}

我使用了相同的想法,但没有删除输入元素,我只是再次调用同一个函数,它工作正常,即使用参数中传递的新更新值重新创建对象。我使用了相同的想法,但没有删除输入元素,我只是再次调用同一个函数,它工作得很好,即使用参数中传递的新更新值重新创建对象。