cfinput autosuggest не возвращается должным образом из вызова .get () - PullRequest
0 голосов
/ 14 октября 2011

У меня проблема с тегом 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);
        }
    );
});

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

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

1 голос
/ 14 октября 2011

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

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

 $.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 вручную, чтобы вы могли контролировать имена функций - и могли указывать на них в ваших обработчиках результатов jQuery, когда придет время связываться с ними динамически.

...