Как передать объект в функцию.
Здравствуйте.
function f( type, url, data, arr) { $.ajax({ type: type, url: url, data: data, success: function (jsonVars) { varForID = arr; // при вызове должно быть: varForID = jsonVars.doctor; alert(varForID); }, complete: function() { $('#'+id).trigger('dropDownLoaded'); } }); return varForID; } вызываю функцию: autocomleteRemovedArrWatcher('doctor', 'GET', '/getSecondParams', sendFormAb($('#serviceType_1').val()), arr); не знаю что нужно написать в "arr", чтобы обратиться внутри объекта, который получаю от сервера, к элементу doctor. при подстановке arr в varForID = arr; должно получиться varForID = jsonVars.doctor; |
Че сказал? Сам хоть понял?
Одно можно сказать - у тебя ошибка логическая: Цитата:
|
Цитата:
http://javascript.ru/forum/misc/9459...tml#post174893 |
Цитата:
Цитата:
а так там уже 8 страниц накапало (у меня по 20 постов на страницу), я бы не стал читать, вообще непонятна логика создания факов с х-евой тучей страниц без оглавления, по мне так любому должно быть влом хотя бы перелистать эти все страницы, даже не читая |
вы не на то обратили внимание в посте. Но да ладно. Зато вы указали на ошибку в коде ту которую проглядел.
Вопрос был изначально в другом. Но уже нашёл решение. jsonVars.doctorможно заменить на jsonVars['doctor'] и тогда 'doctor' можно передавать в функцию как строку. function (Str) { jsionVars[Str] } |
function autocomleteRemovedArrWatcher(id, type, url, data, arr) { var varForID; var arrObj; function f( type, url, data, arr) { $.ajax({ type: type, url: url, data: sendFormAb($(data).val()), async: false, success: function (jsonVars) { //jsonVars[arr] instanceof Object?alert(sendFormAb(jsonVars[arr])):{} if (jQuery.type(jsonVars[arr]) !== 'object') { varForID = jsonVars[arr] } else { //alert([jsonVars[arr]].join('\n')) var keys = new Array(); for (var key in jsonVars[arr]) { keys.push(key); } varForID = keys; arrObj = jsonVars[arr]; } }, complete: function() { $('#'+id).trigger('dropDownLoaded'); } }); return [varForID, arrObj]; // обратите внимание сюда } function f0() { $('#'+id).focus(); } function f1(id){ if($('.autoCompleteInput_'+id).length==0) { $('<div class="autoCompleteInput autoCompleteInput_'+id+'" style="width:'+(($('#'+id).width())*1+20*1)*1+'px;">').insertBefore('#'+id); $('#'+id).appendTo('.autoCompleteInput_'+id); $('#'+id).after('<div class="dropDownList dropDownList_'+id+'" style="width:'+$('#'+id).css('width')+';"></div>'); }else { $('.dropDownList_'+id).show(); } } function f2(arr, id) { $('.dropDown_'+id).remove(); for (var i in arr) { if ((arr[i].indexOf($('#'+id).val())!==-1)&&(arr[i]!=='')) { $('.dropDownList_'+id).append('<div class="dropDown dropDown_'+id+'">'+arr[i]+'</div>'); } } } function f3(id) { $('.dropDown_'+id).on('mousedown', function(){ $('#'+id).val( $(this).html()).trigger('changed'); $('#'+id).trigger('inputDropDownClick'); }); $('#'+id).on('blur', function(){ $('.dropDownList_'+id).hide(); }); } function f4(id) { $('#'+id).on('inputDropDownClick', function(){ $('.dropDownList_'+id).hide(); }); } function f5() { $('#'+id).trigger('changed'); } $('#'+id).on({ click: function() { f(type, url, data, arr); }, dropDownLoaded: function() { f1(id); f2(varForID, id); f3(id); f4(id); f0(); }, keyup: function() { f1(id); f2(varForID, id); f3(id); f4(id); f5(); } }); return [varForID, arrObj]; // обратите внимание сюда } autocomleteRemovedArrWatcher('service_2', 'GET', '/getFifthParams', '#serviceType_2', 'service'); не получается при обращении к функции получить этот arrObj консоль пишет. arrObj is not defined. подскажите. что делаю непраильно или помогите ссылкой где прочитать? |
Цитата:
Цитата:
|
Цитата:
я вышел из положения объявив переменные глобально к которым присваиваю результат внутри функций. Это помогло. оказалось return вообще не нужен. в данном вопросе. Как оно обычно и бывает. пока писал пост уже решил проблему))) Но спасибо за внимание. вот как выглядит код теперь. если интересно: var arrObj; function autocomleteRemovedArrWatcher(id, type, url, data, arr) { var varForID; function f( type, url, data, arr) { $.ajax({ type: type, url: url, data: sendFormAb($(data).val()), async: false, success: function (jsonVars) { //jsonVars[arr] instanceof Object?alert(sendFormAb(jsonVars[arr])):{} if (jQuery.type(jsonVars[arr]) !== 'object') { varForID = jsonVars[arr] } else { //alert([jsonVars[arr]].join('\n')) var keys = new Array(); for (var key in jsonVars[arr]) { keys.push(key); } varForID = keys; arrObj = jsonVars[arr]; } }, complete: function() { $('#'+id).trigger('dropDownLoaded'); } }); } function f0() { $('#'+id).focus(); } function f1(id){ if($('.autoCompleteInput_'+id).length==0) { $('<div class="autoCompleteInput autoCompleteInput_'+id+'" style="width:'+(($('#'+id).width())*1+20*1)*1+'px;">').insertBefore('#'+id); $('#'+id).appendTo('.autoCompleteInput_'+id); $('#'+id).after('<div class="dropDownList dropDownList_'+id+'" style="width:'+$('#'+id).css('width')+';"></div>'); }else { $('.dropDownList_'+id).show(); } } function f2(arr, id) { $('.dropDown_'+id).remove(); for (var i in arr) { if ((arr[i].indexOf($('#'+id).val())!==-1)&&(arr[i]!=='')) { $('.dropDownList_'+id).append('<div class="dropDown dropDown_'+id+'">'+arr[i]+'</div>'); } } } function f3(id) { $('.dropDown_'+id).on('mousedown', function(){ $('#'+id).val( $(this).html()).trigger('changed'); $('#'+id).trigger('inputDropDownClick'); }); $('#'+id).on('blur', function(){ $('.dropDownList_'+id).hide(); }); } function f4(id) { $('#'+id).on('inputDropDownClick', function(){ $('.dropDownList_'+id).hide(); }); } function f5() { $('#'+id).trigger('changed'); } $('#'+id).on({ click: function() { f(type, url, data, arr); }, dropDownLoaded: function() { f1(id); f2(varForID, id); f3(id); f4(id); f0(); }, keyup: function() { f1(id); f2(varForID, id); f3(id); f4(id); f5(); } }); } вызов функции: autocomleteRemovedArrWatcher('service_2', 'GET', '/getFifthParams', '#serviceType_2', 'service'); $('#service_1').on('blur', function () { alert(arrObj[$('#service_1').val()]); }); |
Если есть критика или замечания по оптимизации или другим ошибкам. буду благодарен если укажите.
|
Цитата:
Цитата:
тестовый пример - это когда запустил и что-то получил/не получил, если есть ошибки |
Часовой пояс GMT +3, время: 11:26. |