-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;
});

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

3 に答える 3

2

これを試して:

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

ここでフィドルを参照してください。

evalコードはまだjQueryの各ループで実行されるため、あなたのやり方はうまくいきません。

領域外では変数は未定義になります。

于 2013-07-04T06:43:56.730 に答える
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 に答える