В опубликованной вами функции onComplete
вы регистрируете ul_sub
, а не sub_ul
, как вам кажется.
Если в set_path()
не задано значение для глобальной переменной с именем path
, я не вижу, как вы могли бы получить одно и то же значение в этих двух разных функциях - переменная path
внутри * Обработчик 1015 * относится к этой функции и не будет доступен в другом месте. То же самое касается sub_ul
.
Я не могу использовать объекты после запуска JS? Разве они не сохраняются в DOM, как путь?
Я не совсем уверен, что с этим делать, объекты JavaScript не «сохраняются в DOM». Если вы не можете получить доступ к созданному вами объекту, тогда контекст должен отличаться от того, в котором был создан объект, - теперь он должен быть вне области и, следовательно, недоступен. Использование закрытия является одним из способов сохранить функции и переменные доступными. Использование глобальных переменных - еще один способ сделать это, но это не рекомендуется, и его следует избегать, если в этом нет крайней необходимости.
Возможно, вы захотите прочитать эти статьи о области видимости в JavaScript, чтобы лучше понять, как все это работает:
Вы упомянули в комментариях, что создали глобальную path
переменную, но не sub_ul
. Один из простых способов «исправить» ваш код - использовать глобальные переменные. Но опять же, использование глобальных переменных, как правило, не рекомендуется, так как вы можете в конечном итоге загрязнить глобальное пространство имен.
И, не видя больше вашего кода, трудно сказать, будет ли он всегда работать правильно - например, ваш скрипт загрузки может быть вызван событиями, которые не приводят к установке значений path
и sub_ul
, что будет означать, что при запуске функции onComplete
она получит неправильные значения для обоих.
//global vars
var path;
var sub_ul;
$('#uploader').uploadify({
'uploader' : '/admin/includes/uploadify/uploadify.swf',
'script' : '/admin/includes/uploadify/uploadify_storage.php',
'scriptData': {'sessionId': sessionId},
'cancelImg' : '/admin/includes/uploadify/cancel.png',
'buttonImg' : '/site_images/add_files.png',
'folder' : storage,
'auto' : false,
'multi' : true,
'fileExt' : '*.jpg',
'simUploadLimit' : 2,
'wmode': 'transparent',
'width': '150',
'height': '20',
'removeCompleted': false,
'queueID' : 'upload_queue',
'onComplete' : function(event, ID, fileObj, name,response, data) {
//these will now log the values of the global vars
console.log(path);
console.log(sub_ul);
}
});
//code//
$("li.dir > span.name").live('click', function(){
$("span").removeClass("selected");
var li = $(this).parent();
var root = li.attr("title");
var folder = li.find("span.name").html();
//don't redeclare path - that would shadow the global variable
//use the global variable instead
path = root+"/"+folder;
path = path.replace('//', '/');
//don't redeclare sub_ul
sub_ul = $(li).find("> ul.sub_folder");
set_path(sub_ul);
$(this).addClass("selected");
});