从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>
答案 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结果处理程序时指向它们动态。