JS不是保存在DOM中的对象吗?

时间:2011-06-05 23:48:27

标签: javascript jquery dom

我有这个脚本使用jquery和uploadify

      $('#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) {

                             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();
        var path = root+"/"+folder;
        path = path.replace('//', '/');
        var sub_ul = $(li).find("> ul.sub_folder");
                    set_path(sub_ul);
        $(this).addClass("selected");
    });

基本上当我点击带有.name的范围时,它会运行代码var sub_ul = $(li).find("> ul.sub_folder");,该代码有效(发送到set_path())。我在OnComplete结束时第二次启动uploadify时console.log(path);显示正确的值,但console.log(sub_ul);没有返回任何内容(也是警报),就像没有指定对象一样。 JS运行后我无法使用对象?他们不像path那样保存在DOM中吗?

1 个答案:

答案 0 :(得分:2)

  1. 在您发布的onComplete函数中,您正在记录ul_sub而不是sub_ul,因为您似乎想要。

  2. 除非在set_path()中设置名为path的全局变量的值,否则我看不出如何在这两个不同的函数中获得相同的值 - 变量{{ path处理程序中的1}}范围限定为该函数,并且在其他地方无法访问。 click也是如此。

  3.   

    JS运行后我无法使用对象?难道他们不像路径一样保存在DOM中吗?

    我不太清楚要做什么,JavaScript对象不会“保存在DOM中”。如果您无法访问已创建的对象,则上下文必须与创建对象的上下文不同 - 它现在必须超出范围且因此无法访问。使用闭包是保持函数和变量可访问的一种方法。使用全球变量是另一种方法,但不建议这样做,除非绝对必要,否则应该避免使用。


  4. 您可能希望阅读这些有关JavaScript范围的文章,以便更好地了解工作原理:


    您在评论中提到,您已制作全局sub_ul变量,但不是path。 “修复”代码的一种简单方法是使用全局变量。但同样,通常不鼓励使用全局变量,因为最终可能污染全局命名空间。

    如果没有看到更多代码,很难说这是否总能正常运行 - 例如,您的uploadify脚本可能由不会导致sub_ul和{{1}值的事件触发要设置,这意味着当path函数运行时,它将为两者都得到错误的值。

    sub_ul