jQuery - 将文本添加到var并稍后使用(Uncaught ReferenceError)

时间:2013-10-24 14:08:38

标签: jquery

我有一个带有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);
    }
 });

我可以在console.log中看到文本正在textareatext var中保存。到目前为止一切都很好。

用户在输入文本后提交表单:

   $(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 个答案:

答案 0 :(得分:1)

那是因为你的变量是在另一个范围内定义的。您应该将其设置为全局(或者至少应该在可从您需要的所有位置访问的范围中定义它):

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

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

答案 1 :(得分:1)

正如@dystroy所说,你可以将变量设为全局变量,但不要让全局变量存在,只需在需要时从字段中获取该文本,毕竟,你有一个ID:

<p class="message">'+ $("#message").val() +'</p>

答案 2 :(得分:0)

这是因为textareatext是在keyup事件中声明的局部变量。

因此,在proccessData() javascript函数内部,您无法访问它,因此您在控制台中收到错误。

将其声明为全局变量将解决您的问题,如:

var __textareatext = '';

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

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

还将textareatext javascript函数中的变量proccessData()更改为__textareatext

答案 3 :(得分:0)

对我来说看起来像是一个范围问题。您在函数内定义了变量textareatext,然后尝试在另一个函数中使用它。尝试:

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

if($(this).val() != '')
{
  textareatext= $(this).val();
 //console.log(textareatext);
}
});
编辑:干得好,大家好。