0

私は JavaScript と jQuery を学び始めていますが、まったく理解していない小さな JavaScript の概念があります。関数、セッター、ゲッターについてです。コード例を次に示します。

ご覧のとおり、マークアップをクリックすると、ダイアログ フォームが開きます。ダイアログ フォームからデータを取得し、それを 2 つのオブジェクト (myHeadermyContent) に保存して、最後に使用します。

  • 最初にconsole.log実行されるのは(1)で、出力され'hi'ます。
  • 2 つ目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

関数、セッター、またはゲッターに問題はありません。問題は、対話 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 に答える