-2

有谁能够帮我 ?- >

我不会在 jQuery.each 之后定义函数内部的 vars id、zIndex、width,它们的值将是传递给函数 MyFunction 的数组中的值:

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

非常感谢您的帮助,彼得

代码>

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 是公共的

我的问题是如何使用方法

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

在插件公共方法打开窗口中

这是更复杂的代码:

    (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);
4

3 回答 3

2

尝试这个:

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

在这里看小提琴。

你的方法行不通,因为eval代码仍然在 jQuery 的每个循环中运行,所以

变量将在区域外未定义。

于 2013-07-04T06:43:56.730 回答
0

代替...

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

利用

window[key] = value;

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

于 2013-07-04T06:44:44.147 回答
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);
于 2013-07-04T07:58:55.330 回答