0

オブジェクトを返す JavaScript 関数があります。そのオブジェクトを myarray オブジェクトに格納し、 switch を使用して一致した値を返そうとします。一致した値、つまり「未定義」を返すと、誤った結果が返されます

以下のコードとそのコメントを読んでください

parseobjectarray('description') // "undefined"


function parseobjectarray(attribute) {
    var returnval;
    $(document).ready(function () {
        var myArray = new Object(); 
        myArray = ParsePagetags(); // returns an object
        switch (attribute) {
            case 'description':
                returnval = myArray.description;
                //alert(returnval); // shows correct result
                break;
            default:
                returnval = "";
        }
            //alert(returnval); // shows correct result
    });
    alert(returnval); // shows incorrect result i.e "undefined"
    return returnval; // shows incorrect result i.e "undefined"
}

どうして???

4

4 に答える 4

2

君の:

alert(returnval);

次の範囲内にありません:

$(document).ready(function () {

});

試す:

$(document).ready(function () {

    function parseobjectarray(attribute) {

        var returnval;
        var myArray = new Object();
        myArray = ParsePagetags(); // returns an object array

        switch (attribute) {
            case 'description':
                returnval = myArray.description;
                alert(returnval); // shows correct result
            break;
            default:
                returnval = "";
        }

        alert(returnval); // shows correct result
        return returnval;
    }

    parseobjectarray(yourAttribute);

});
于 2012-06-27T20:37:49.003 に答える
1

内部のメソッドは実行後$(document).ready()に実行されます。alert(returnVal)

于 2012-06-27T20:39:01.770 に答える
1

ここでのアーキテクチャは完全に間違っています。変数を初期化してからメソッドを呼び出し、変数$(document).ready()に警告してからreturnval変数を返そうとしています。

次の構造を試してください。

function parseobjectarray(attribute) {  
    var returnval;  

    var myArray = new Object();
    myArray = ParsePagetags(); // returns an object
    switch (attribute) {
        case 'description':
            returnval = myArray.description;
            alert(returnval); // shows correct result
            break;
        default:
            returnval = "";
    }
    alert(returnval); // shows correct result  

    return returnval;
}

$(document).ready(function(){
    parseobjectarray(attribute);
});

$(document).ready()ドキュメントがロードされたら、イベントリスナーを確立したり、指定された関数を起動したりするために使用されます。ドキュメントが読み込まれ、関数が再利用されることが予想されるときにこの関数を起動する場合は、メソッド内から関数宣言を移動してから、関数を個別に呼び出します。

関数が再利用されない場合は、関数宣言を関数内に保持でき$(document).ready()ます。

于 2012-06-27T20:43:32.077 に答える
0

関数内に $(document).ready(... を含める特別な理由はありますか? document.ready... なしで試してください。

function parseobjectarray(attribute) {
var returnval;

    var myArray = new Object();
    myArray = ParsePagetags(); // returns an object array
    switch (attribute) {
        case 'description':
            returnval = myArray.description;
            alert(returnval); // shows correct result
            break;
        default:
            returnval = "";
    }

alert(returnval); // shows incorrect result i.e "undefined"
return returnval;
}
于 2012-06-27T20:40:27.647 に答える