0

我开始学习 JavaScript 和 jQuery,有一个小的 JavaScript 概念我完全不明白。它是关于函数、setter 和 getter 的。这是代码示例。

如您所见,当我单击标记时,会打开一个对话框表单,我通过对话框表单获取数据,将其保存到两个对象(myHeadermyContent)中,最后使用它。

  • 第一个console.log执行的是(1),它打印'hi'.
  • 第二个console.log(2),它打印保存到对象中的内容myHeader
  • 但是console.lognumber (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)
    },
  }
)};
4

2 回答 2

1

对我来说就像一个时间问题:

把你的 myHeader 和 myContent-Declaration 从 jQuery-Ready-Callback 中取出,或者把它放在最开始。

于 2013-02-23T01:38:54.017 回答
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");
});

open 方法不接受任何参数,因此只有参数。

我会建议你在使用任何 api 之前查看它的 api 文档。 api.jqueryui.com/dialog/

我发现的其他语法错误是您没有正确关闭括号。

)}; 将为您});提供额外的});$(function() {

于 2013-02-23T01:55:38.277 回答