【问题标题】:Prototype multiple auto completes原型多个自动完成
【发布时间】:2011-05-23 14:57:24
【问题描述】:

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

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 = '';
            }
    } );
});

我遇到的问题是,当我有一个依赖于另一个自动完成的自动完成时,我遇到了问题。第一个自动完成让您选择一个模型并将选定的模型 ID 存储在一个隐藏的输入字段中。第二个自动完成正在使用此值,以便它知道应该查看哪个数据库表。

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

问题 2:如果我在 observe:focus 上创建自动完成,他们每次都会读取新的值,但每次关注自动完成字段时也会创建它们自己的多个实例。

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

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

【问题讨论】:

    标签: ajax autocomplete prototypejs


    【解决方案1】:

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

    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();
    }
    

    【讨论】:

    • 我使用了相同的想法,但没有删除输入元素,我只是再次调用相同的函数,它工作得很好,即使用参数中传递的新更新值重新创建对象.
    猜你喜欢
    • 2011-07-09
    • 2011-06-30
    • 2018-06-17
    • 1970-01-01
    • 2011-04-10
    • 2013-01-06
    • 2013-04-05
    • 2012-05-27
    • 2012-10-03
    相关资源
    最近更新 更多