2012-02-23 15 views
0

再定義リターンが期待される時に、私はこのように構築されたJavaScriptオブジェクトを持っていますページロードされた(私は、スクリプトを確認し、機能がある)私は、同じ機能を使用してDashboard.form.actionを再定義する場合、結果は、undefinedですが:オブジェクトのプロパティは、最初は、undefinedを返しますが、値

Dashboard.form.action = function(){ 
    return $('#upload_form').attr('action'); 
}(); 

、その後はそれを呼び出す、期待どおりに動作します!

私は間違っていますか?これはバグですか、それとも私はそれを思っていますか?

+0

オブジェクトを作成して初期化しますが、現時点ではHTMLの書式が読み込まれていません。これはエラーですか? – silly

答えて

2

更新:以下、あなたのコメントを再

:実際に私はアクションプロパティに結果を割り当てることです何をしたいのか

...質問で

ます言った:

私が電話したら... Dashboard.form.action ...それはあなたが(あなたが非機能を「コール」していない)機能をするactionを期待しているように思われてしまう

文字列(「操作」属性の値が#upload_form)であることが予想される場合は、関数をまったく使用する必要はありません。しかし、doは、の後にを実行していることを確認する必要があります。#upload_form要素が既にDOMに存在しています。 、またはreadyコールでスクリプトをラップ;(just before or just after the closing </body> tagがうまく機能anywhere belowそれは結構です)マークアップでその下にスクリプトを置くのいずれか、それをする

だからあなたのコードのいずれかとなりこれは、マークアップで#upload_formだ場合:あなたはreadyを使用したい場合は

var Dashboard = { 

    form : { 
     action : $('#upload_form').attr('action'), 

     //snip (more functions) 
    } 
}; 

...またはこの(Dashboardを使って何かは待機する必要があります)ならびにreadyまで:

jQuery(function($) { 
    var Dashboard = { 

     form : { 
      action : $('#upload_form').attr('action'), 

      //snip (more functions) 
     } 
    }; 
}); 

なお、第2の場合には、Dashboardはグローバル変数ではなくなります。それは、良いことですが、あなたはそれが何らかの理由でグローバルにする必要がある場合、あなたはそれをエクスポートすることができます。

jQuery(function($) { 
    var Dashboard = { 

     form : { 
      action : $('#upload_form').attr('action'), 

      //snip (more functions) 
     } 
    }; 

    // Export the global 
    window.Dashboard = Dashboard; 
}); 

だけで何もreadyが発射される前にDashboardを使用しようとしていないことを確認してください。そこにそれらを置くことによって

action: function(){return $('#upload_form').attr('action');}() 
//            here -------^^ 

、すぐコール機能、およびを割り当てる:


オリジナルの答え

あなたはその上()の余分なペアを持っていますactionプロパティに呼び出す結果あなただけのプロパティに機能自体を割り当てるので、それを呼び出すために最後に()を入れないでください:

action: function(){return $('#upload_form').attr('action');} 

これはあなたがここに()を(使用しないとまったく同じ理由でありますあなたは

var f = foo(); 
を言っている場合

var f = foo; 

:あなたはffooを参照したい場合は)あなたがfooと呼ばれる機能を持っていると仮定しましょう

... fooとすると、それを参照することはありません。

+0

実際に私がしたいことは、アクションプロパティに結果を割り当てることなので、なぜそれができないのか分かりません。 – OverLex

+0

@OverLex:ああ、大丈夫です。それから、あなたは全く機能を必要としません(それはあなたとあなたの言う "呼び出し"が私を混乱させます)。更新された回答を参照してください。 :-) –

+0

ありがとう、それはそれを解決! – OverLex

関連する問題