【问题标题】:jQuery - Add text to var and use it later (Uncaught ReferenceError)jQuery - 将文本添加到 var 并稍后使用(未捕获的 ReferenceError)
【发布时间】:2023-03-12 09:25:01
【问题描述】:

我有一个带有 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 变量中。到目前为止一切顺利。

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

   $(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

【问题讨论】:

    标签: jquery


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      那是因为您的变量是在另一个范围内定义的。你应该让它成为全局的(或者至少你应该在你需要它的所有地方都可以访问的范围内定义它):

      var textareatext;
      $('#message').keyup(function(e){
      
          if($(this).val() != '')
          {
            textareatext= $(this).val();
           //console.log(textareatext);
          }
       });
      

      【讨论】:

        【解决方案3】:

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

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

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

        var __textareatext = '';
        
        $('#message').keyup(function(e){
        
            if($.trim(this.value) != '')
            {
               __textareatext= $.trim(this.value);
            }
        });
        

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

        【讨论】:

          【解决方案4】:

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

          var textareatext;
          $('#message').keyup(function(e){
          
          if($(this).val() != '')
          {
            textareatext= $(this).val();
           //console.log(textareatext);
          }
          });
          

          编辑:干得好,大家。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-08-20
            • 1970-01-01
            • 2013-06-29
            • 2018-10-18
            • 1970-01-01
            • 2020-04-22
            相关资源
            最近更新 更多