0

私はテキストエリアを持っていますid="message"

      <form method="post" name="addreply" id="addreply"> 
        <input type="hidden" name="pmid" id="pmid" value="">
        <textarea rows="10" cols="5" name="message" id="message" placeholder="Write your message..."></textarea>
        <input type="submit" class="butt green" value="Send">
      </form>

ユーザーがそのテキストフィールドに入力したものを変数に「保存」し、フォームが送信された後にそれを使用したいと考えています。

現在、私が持っているのはこれです:

$('#message').keyup(function(e){

    if($(this).val() != '')
    {
      var textareatext= $(this).val();
     //console.log(textareatext);
    }
 });

textareatextテキストがvarに保存されていることを console.log で確認できます。ここまでは順調ですね。

ユーザーは、テキストを入力した後、フォームを送信します。

   $(function() {
        $('form').submit(function(){
            $('#heading').hide();  
            $('#status').removeClass().addClass('alert info').html('Loading...').fadeIn();  
            $.post(
                '/index.php?i=pm&p=rr', 
                $('form').serialize(),
                function (data) {
                    proccessData(data);
                }
            );
            return false;    
        });
    });

    function proccessData (data) {
        $('#status').hide().html('');

        if(data=='success'){
            $("#post").append('<li class="current-user"><img width="30" height="30" src=""><div class="bubble"><a class="user-name"><?php echo $userdata['username']; ?></a><p class="message">'+textareatext+'</p><p class="time"></p></div></li>');


            $('#status').removeClass().addClass('alert success').html('Success!').slideDown();

        }
        else {
            $('#status').removeClass().addClass('alert error').html(data).fadeIn();
        }
    }

console.log に次のエラーが表示されます。Uncaught ReferenceError: textareatext is not defined

4

4 に答える 4

1

これは、変数が別のスコープで定義されているためです。グローバルにする必要があります(または、少なくとも、必要なすべての場所からアクセスできるスコープで定義する必要があります):

var textareatext;
$('#message').keyup(function(e){

    if($(this).val() != '')
    {
      textareatext= $(this).val();
     //console.log(textareatext);
    }
 });
于 2013-10-24T14:10:06.860 に答える
1

@dystroy が言ったように、変数をグローバルにすることができますが、グローバルを配置するのではなく、必要なときにフィールドからそのテキストを取得するだけで、ID を取得できます。

<p class="message">'+ $("#message").val() +'</p>
于 2013-10-24T14:11:12.883 に答える
0

Looks like a scope issue to me. You defined the variable textareatext inside a function and then tried to use it in another function. Try:

var textareatext;
$('#message').keyup(function(e){

if($(this).val() != '')
{
  textareatext= $(this).val();
 //console.log(textareatext);
}
});

EDIT: Good job, everyone.

于 2013-10-24T14:13:05.163 に答える
0

これは、イベントtextareatext内で宣言されたローカル変数であるためです。keyup

したがって、proccessData()javascript 関数内ではアクセスできないため、コンソールでエラーが発生します。

グローバル変数として宣言すると、次のような問題が解決されます。

var __textareatext = '';

$('#message').keyup(function(e){

    if($.trim(this.value) != '')
    {
       __textareatext= $.trim(this.value);
    }
});

textareatextまた、proccessData()javascript 関数の変数を に変更します__textareatext

于 2013-10-24T14:11:09.070 に答える