Как передать объект в функцию.
Здравствуйте.
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, время: 14:06. |