2013-02-23 76 views
0

我開始學習JavaScript和jQuery,並且有一個我根本不理解的小JavaScript概念。這是關於職能,制定者和獲得者。這裏是代碼示例。正如你所看到的,當我點擊一個標記時,一個對話框窗體打開,我通過對話框窗體獲取數據,將它保存到兩個對象中(myHeadermyContent),最後使用它。Javascript + jQuery +實現getter和setter的函數

  • 執行的第一個console.log(1),它打印'hi'
  • 第二個console.log(2),它打印保存在對象myHeader中的內容。
  • console.log號碼(3),有時不打印任何東西,或打印undefined

我對JavaScript函數有什麼誤解?

$(function() { 

$(".myMarkup").click(function() { 
    $("#dialog-form").dialog("open", function() { 
     console.log(myHeader.getContent()); //(3) 
    }); 
}); 


Header = function() { 
    var val='hi'; 
    this.getContent = function() { return val; } 
    this.setContent = function(x) { val = x; } 
}; 

Content = function() { 
    var val='hi'; 
    this.getContent = function() { return val; } 
    this.setContent = function(x) { val = x; } 
}; 

var myContent = new Content(); 
var myHeader = new Header(); 
    console.log(myHeader.getContent()); //(1) 


$("#dialog-form").dialog({ 
    autoOpen: false, 
    height: 300, 
    width: 350, 
    modal: true, 
    buttons: { 
    "Modify": function() { 
    a = document.getElementById('name').value.toString(); 
    b = document.getElementById('surname').value.toString();  
    myHeader.setContent(a); 
    myContent.setContent(b); 
    console.log(myHeader.getContent(a)); //(2) 
    }, 
    } 
)}; 
+3

從文檔:http://api.jqueryui.com/dialog/#method-open-「open」方法不接受任何參數。我不明白'(3)'會如何到達 – 2013-02-23 01:10:44

回答

1

問題不在函數,setter或getter中。問題在於如何使用對話API。 它看起來像你想打開事件的回調函數,所以你可以在初始化時添加回調函數。

$("#dialog-form").dialog({ 
//your options + 
open:function() { 
     console.log(myHeader.getContent()); 
    } 

}); 

或更高版本調用open方法

$(".myMarkup").click(function() { 

    $("#dialog-form").bind("dialogopen", function() { 
     console.log(myHeader.getContent()); //(3) 
    }).dialog("open"); 
}); 

開放的方法不接受任何參數,所以只會有參數之前設置。

我會建議你在使用任何API之前查看它的api文檔。 api.jqueryui.com/dialog/

我發現的其他語法錯誤是你沒有正確關閉括號。

)};將});與一個額外的});爲您的$(function() {

+0

感謝您的時間。我的問題是,在console.log號碼(3),我需要從對話框形式記錄在myHeader和myContent中的數據。問題在於控制檯記錄'hi',而不是寫在對話框中的數據。這就是我想要創建一個回調的原因,所以在對話框完成之後,並且將新數據合併到myHeader和myContent中後,我可以使用它。存在某種同步問題。非常感謝您提前! – 2013-02-23 18:58:31

+0

讓我知道這是否解決了您的問題http://jsfiddle.net/8ZBsV/2/。因爲我沒有發現任何同步問題。唯一的是你如何使用回調函數。 – 2013-02-24 02:36:26

+0

感謝您的信息。 「綁定」功能真的是答案。一種創建「回調」的方法,在完成對話框表單之後,繼續執行其餘代碼,而不是並行執行。真的感謝。 – 2013-02-24 21:11:32

1

接縫我像一個時序問題:

把你myHeader &爲myContent-宣言出了jQuery就緒回調,或者把它放在最開始。