cfinput autosuggest не возвращается должным образом из вызова.get()

У меня проблема с тегом cfinput при возврате из вызова jQuery .get(). Если я поставлю тег на главной странице примерно так:

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

Тег загружается правильно, и автозаполнение работает как положено. Однако, если я помещу точно такой же тег (и ничего больше) в отдельный шаблон с именем 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);
        }
    );
});

тег загружается, но автозаполнение не работает. Консоль показывает мое получение, за которым следуют еще восемь звонков:

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 ответ

Решение

Это не будет ответ, который вы хотите услышать.

Чтобы вы могли динамически отображать результаты операции jQuery .get() и иметь новый вступивший в силу javascript, события, которые влияют на вновь отображаемый HTML, должны быть связаны во время обработчика результатов исходного.get(). Обычно это выполнимо... что-то вроде:

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

Вы найдете способ указать / вызвать ваши новые функции в этой привязке события change к совершенно новому полю ввода, которое было загружено в результате вашего первоначального вызова.get().

Где это становится грязным, когда CFML вовлечен. cfform/cffinput, при использовании в сочетании с параметром autosuggest... создайте JavaScript вручную для вас... автоматически. Тем не менее, нет никакого реального контроля над генерацией этого кода -CF назовет его произвольно. Когда я набрал твой код для проверки, я получил функцию с именем _cf_autosuggest_init_1318614417652... это то же самое для тебя? (Возможно нет).

Поэтому вам будет чрезвычайно сложно динамически связывать новые обработчики событий в результате.get()- если вы не знаете, как они будут вызываться.

Я рекомендую либо изменить дизайн вашего вызова.get (), чтобы вы не загружали cfform/cfinput- но, возможно, сами необработанные данные - и сохраняли входные данные в родительском шаблоне, либо (глубокий вдох)...

... удалите cfform / cfinput и напишите вручную функцию автозаполнения jQuery, чтобы вы могли контролировать имена функций - и могли указывать на них в ваших обработчиках результатов jQuery, когда наступит время их динамического связывания.

Другие вопросы по тегам