cfinput autosuggest未从.get()调用中正确返回

时间:2011-10-14 12:12:08

标签: jquery coldfusion autosuggest cfinput

从jQuery .get()调用返回时,我遇到了cfinput标记的问题。如果我将标签放在主页上,如下:

<cfform>
    <cfinput type="text" name="txtinputfilter" autosuggest="cfc:#Application.cfcDir#autoSuggest.lookupTailNumber({cfautosuggestvalue})" > 

标记正确加载,autosuggest按预期工作。但是,如果我将完全相同的标记(并没有别的)放在一个单独的模板中,名为common / includes / FilterData.cfm,并从主页面调用它,如下所示:

<div id="txt_input_container"></div>
$(document).ready(function(){
    //the following get call is normally called on another select input's onchange
    $.get('common/includes/FilterData.cfm',
        //note that the following parameters are not being used in this example
        {column: selectedValue,
         filterValue: filterValue,
         filterID: filterID,
         configFile: 'Tracking/config/GeneralMaint.xml'},
        function(response){
            $('#txt_input_container').empty().append(response);
        }
    );
});

标记加载,但autosuggest不起作用。控制台显示我的get,然后再打八个电话:

http://localhost/CORE/common/includes/FilterData.cfm?column=SERIAL_NUMBER&filterValue=&filterID=fi_1&configFile=Tracking%2Fconfig%2FGeneralMaint.xml

http://localhost/CFIDE/scripts/ajax/yui/yahoo-dom-event/yahoo-dom-event.js?_=1318592952367

http://localhost/CFIDE/scripts/ajax/yui/animation/animation-min.js?_=1318592952634

http://localhost/CFIDE/scripts/ajax/yui/autocomplete/autocomplete-min.js?_=1318592952706

http://localhost/CFIDE/scripts/ajax/messages/cfmessage.js?_=1318592952745

http://localhost/CFIDE/scripts/ajax/package/cfajax.js?_=1318592952782

http://localhost/CFIDE/scripts/ajax/package/cfautosuggest.js?_=1318592952821

http://localhost/CFIDE/scripts/cfform.js?_=1318592952859

http://localhost/CFIDE/scripts/masks.js?_=1318592952907

后跟此错误消息:

_cf_resetLoadingIcon_1318592952305 is not defined
[Break On This Error] /* ]]> */</script> 

1 个答案:

答案 0 :(得分:1)

这不是您想要听到的答案。

为了动态显示jQuery .get()操作的结果,并使新的javascript生效,必须在初始.get()的结果处理程序中绑定影响新显示的HTML的事件。 。通常情况下,这是可行的......在以下方面:

 $.get('common/includes/FilterData.cfm',
        {column: selectedValue},
        function(response){
           $('input').change(function(event){
              ...addtl. logic here
           }

您可以找到一种方法,在更改事件的绑定中指向/调用您的新函数到由于您的初始.get()调用而加载的全新输入字段。

当涉及CFML时,这会变得混乱。 cfform / cffinput,当与autosuggest参数结合使用时......为您自动构建javascript ...但是,对这段代码的生成没有真正的控制 - CF会任意命名。当我输入你的代码进行测试时,我得到了一个名为_cf_autosuggest_init_1318614417652的函数......对你来说是一样的吗? (可能不是)。

因此,如果你不知道它们将被调用什么,你就会非常难以在.get()的结果上动态绑定新的事件处理程序。

我的建议是重新设计你的.get()调用,这样你就不会加载cfform / cfinput - 但可能是原始数据本身 - 并将输入保留在父模板上,或者(深呼吸) ...

...废弃cfform / cfinput,并手动编写jQuery autosuggest功能,以便控制函数的名称 - 并且可以在绑定到jQuery结果处理程序时指向它们动态。