每个函数在jquery中的变量

时间:2013-07-04 06:36:53

标签: javascript jquery

任何人都可以帮助我吗? - >

我不会定义vQuery id,zIndex,jQuery.each之后的函数宽度 它们的值将是传递给函数MyFunction的数组的值:

console.log(id);  //ID IS NOT DEFINED  
console.log(zIndex);  //NOT DEFINED  
console.log(width);  //NOT DEFINED
非常感谢你的帮助,彼得

代码和GT;

var MyArray = new Object();
MyArray.id = "3";
MyArray.zIndex = "3";
MyArray.width = "600";

function MyFunction(my_array) {

console.log(my_array.id);  //IT IS OK, id is defined    

jQuery.each(my_array, function(key,value) {
    alert(key + " = " + value);
    eval("var" + key + " = " + value); //??????? 


});

console.log(id);  //ID IS NOT DEFINED
console.log(zIndex);  //NOT DEFINED
console.log(width);  //NOT DEFINED

}

MyFunction(MyArray);

-----更新----------------------

感谢所有人的回答 在这个时候我更新了我的代码, 我想为我的申请创建小插件 方法OPENWINDOW是PUBLIC

我的问题是如何使用方法

jQuery.each(my_array, function(key,value) {
 window[key]=value;
});

IN PLUGIN PUBLIC METHOD OPENWINDOW

这里的代码更复杂:

    (function($){
    $.fn.MyPlugin = function(options) {

            ...... CODE

            this.OpenWindow = function(my_array) {

            //this way dont work for me here, vars are not defined
            var window = $(window);
                    jQuery.each(my_array, function(key,value) {
                window[key]=value;
            });


                    //VARS ARE NOT DEFINED
                    console.log(id); 
            console.log(zIndex);
            console.log(width);


               //this way work well
                for (var k in my_array){
                    eval ("var " + k + " = " + my_array[k]);
                }

                        //VARS ARE DEFINED
                console.log(id); 
                console.log(zIndex);
                console.log(width);


            .... code

     return this;
    };
    })(jQuery);

var MyArray = new Object();
MyArray.id = "3";
MyArray.zIndex = "3";
MyArray.width = "600";


var MyPlugin = $.fn.MyPlugin();
MyPlugin.OpenWindow(MyArray);

3 个答案:

答案 0 :(得分:1)

试试这个:

 $.each(my_array,function(i,n){
    window[i]=n;
})

请参阅小提琴here

你的方式不起作用,因为eval代码仍然在jQuery的每个循环中运行,所以

变量将在区域外定义。

答案 1 :(得分:0)

而不是......

eval("var" + key + " = " + value);

使用

window[key] = value;

但是后来id,zIndex和width将成为全局变量。因此,如果您不想发生任何冲突,则必须删除它们。

答案 2 :(得分:0)

而不是在jquery.each中执行它,直接迭代使用for循环传递的对象并使用eval。

var MyArray = new Object();
MyArray.id = "3";
MyArray.zIndex = "3";
MyArray.width = "600";

function MyFunction(my_array) {
    for (var k in my_array){
        eval ("var " + k + " = " + my_array[k]);
    }
    console.log(id); 
    console.log(zIndex);
    console.log(width);

}

MyFunction(MyArray);