Javascript全局变量在jQuery Droppable中不起作用

时间:2013-03-14 17:24:23

标签: javascript jquery jquery-ui scope jquery-ui-draggable

这一定是个例外,因为我很确定它应该有效:

var myvar; // global variable

function draggableinit(e, ui){
    console.log(myvar); // still defined here
    jQuery('.drop-div').droppable({
        deactivate: function(event, ui){
            console.log(myvar); // why undefined?
        }
    });
}

function set(){
    var myvar = jQuery('.cont').resizable({
        start: function(event, ui) {  },
        resize: function(event, ui) {  },
        stop: function(event, ui) { // functions to manipulate size  }
    });
    return myvar;
}

jQuery(document).ready(function(){
    myvar = set();
    jQuery('.some-div').draggable({
        "start": draggableinit
    });
});

我想知道为什么myvar在那个地方未被定义?不应该从任何地方进入吗?

文档:http://jqueryui.com/draggable/

2 个答案:

答案 0 :(得分:2)

将其直接分配给window以排除范围冲突。这应该工作。在预期范围之外创建var foo不会自动使其成为“全局”,只是 范围块和嵌套范围的全局。

function draggableinit(e, ui){
    jQuery('.drop-div').droppable({
        deactivate: function(event, ui){
            console.log(window.myvar); // why undefined?
        }
    });
}

jQuery(document).ready(function(){
    window.myvar = 123;
    jQuery('.some-div').draggable({
        "start": draggableinit
    });
});

答案 1 :(得分:0)

你正在为你的脚本创建全局 - 而不是nessecarily全局所有脚本。在windowdocument

中创建