2

以下のコードの$mytextareaのスコープがgetAnswerToo()関数に拡張されない理由を誰かに教えてもらえますか?

getAnswer()は、更新する要素を明示的に選択しているため、機能します。ただし、グローバルな「ハンドラー」変数を使用しようとしても機能しません。

変数のスコープに関するこの問題は、jQueryオブジェクトを保持しているという事実に特に関連していると思います。もう1つの変数myurlは正常に機能します。

どんな助けでも大歓迎です!

var myurl = "php/getAnswer.php";

var $mytextarea = null;  //  a handler for the textarea element
$mytextarea = $('textarea#mytextarea');

getAnswerToo();

    function getAnswer(){ // works

        var request = $.ajax({
          url: myurl,
          type: "POST",
          data: {question: questionId, user: userId},
          dataType: "html",
          success: function(data) {
            $('textarea#mytextarea').val(unescape(data));
          }
        });

    }

    function getAnswerToo(){ // doesn't work

        var request = $.ajax({
          url: myurl,
          type: "POST",
          data: {question: questionId, user: userId},
          dataType: "html",
          success: function(data) {
            $mytextarea.val(unescape(data));
          }
        });

    }
4

2 に答える 2

1

これはどこにありますか?

$mytextarea = $('textarea#mytextarea');

セレクターは、DOMが初期化されるときに機能します。これは機能するはずです:

$(function() {     
   $mytextarea = $('textarea#mytextarea'); 
   getAnswerToo();
});
于 2012-10-11T17:42:44.063 に答える
1

$('textarea#mytextarea')DOMがまだ初期化されていないため、空の配列を返します。DOMの準備ができた後に呼び出される間、コード全体をコードブロックでラップします。

于 2012-10-11T17:46:20.080 に答える