【问题标题】:jQuery get textarea textjQuery获取textarea文本
【发布时间】:2010-09-13 18:35:39
【问题描述】:

最近我开始使用 jQuery,并且一直在学习一些教程。现在我觉得使用它有点能力(这很容易),我认为如果我能够在我的网页上创建一个“控制台”会很酷(就像你在FPS 中一样按下`键游戏等),然后将其 Ajax 本身返回到服务器以执行操作。

我最初认为最好的方法是获取文本区域内的文本,然后将其拆分,或者我应该使用 keyup 事件,将返回的键码转换为 ASCII 字符,将字符附加到字符串并发送到服务器的字符串(然后清空字符串)。

我找不到任何关于从 textarea 获取文本的信息,我得到的只是 keyup 信息。另外,如何将返回的键码转换为 ASCII 字符?

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    为什么要将击键转换为文本?添加一个按钮,在单击时将文本区域内的文本发送到服务器。您可以使用 value 属性作为海报之前指出的文本,或者使用 jQuery 的 API:

    $('input#mybutton').click(function() {
        var text = $('textarea#mytextarea').val();
        //send to server and process response
    });
    

    【讨论】:

    • 因为 textarea 将包含比所需文本更多的内容。 (它是控制台,可视化命令提示符)。感谢您提供有关 val 函数的信息。 :)
    • 您可以使用javascript处理文本。返回击键码有什么意义?
    • 重点是,imo,获取击键代码会比用分隔符分割文本区域更有效(图片可能是大的文本数组)。
    • 抱歉,我无法想象那种情况会是真的......也许如果你编辑了你的原始帖子并添加了一个例子,它会帮助人们尝试回答
    • 我忘记了 html 标签 id 前面的 'textarea' 部分
    【解决方案2】:

    通常是您使用的文本函数(例如,在 div 等中),那么对于文本区域,它是 val

    得到:

    $('#myTextBox').val();
    

    设置:

    $('#myTextBox').val('new value');
    

    【讨论】:

      【解决方案3】:

      您应该有一个只包含控制台消息的 div,即先前的命令及其输出。在下面放置一个输入或文本区域,只保存您正在输入的命令。

      -------------------------------
      | consle output ...           |
      | more output                 |
      | prevous commands and data   |
      -------------------------------
      > This is an input box.
      

      这样你只需将输入框的值发送到服务器进行处理,并将结果附加到控制台消息div。

      【讨论】:

      • 是的,正是我的想法。这是唯一一个不涉及从输出中解析输入的干净解决方案(愚蠢的尝试——如果用户键入一些“输出”怎么办),或者尝试从击键事件构建字符串(愚蠢的尝试-- 退格等呢?)。
      • SO 上的另一个 XY 问题。这显然是解决他的问题“X”的最佳方法。
      【解决方案4】:

      通常是 value 属性

      testArea.value
      

      或者我在你需要的东西中缺少什么?

      【讨论】:

      • 我实际上希望调用 textchanged 事件或类似的东西(无论如何我可以很容易地使用 keyup 事件来做到这一点)。我想我会坚持使用 keyup 事件,但是您知道将键码转换为 ASCII 字符的方法吗?谢谢。 :)
      【解决方案5】:

      我发现我可以使用以下函数将事件的keyCode转换为字符:

      var char = String.fromCharCode(v_code);
      

      然后我会从那里将字符附加到一个字符串,并在按下回车键时将字符串发送到服务器。很抱歉,如果我的问题看起来有点神秘,而且标题的意思几乎完全跑题了,现在是一大早,我还没有吃早餐;)。

      感谢大家的帮助。

      【讨论】:

        【解决方案6】:

        我认为“控制台”这个词引起了混乱。

        如果你想模拟一个老式的全/半双工控制台,你会使用这样的东西:

        $('console').keyup(function(event){
            $.get("url", { keyCode: event.which }, ... );
            return true;
        });
        

        event.which 有被按下的键。对于退格处理,event.which === 8。

        【讨论】:

          【解决方案7】:

          最好的方法: $('#myTextBox').val('新值').trim();

          【讨论】:

            【解决方案8】:

            可以通过名称和id获取textarea数据

            // by name
            <textarea name="comment"></textarea>
            let text_area_data = $('textarea[name="comment"]').val();
            
            // by id
            <textarea id="comment" name="comment"></textarea>
            let text_area_data = $('textarea#comment').val();
            

            【讨论】:

              【解决方案9】:

              读取textarea值和code-char转换:

              function keys(e) {
                msg.innerHTML = `last key: ${String.fromCharCode(e.keyCode)}`
                
                if(e.key == 'Enter') {
                  console.log('send: ', mycon.value);
                  mycon.value='';
                  e.preventDefault();
                }
              }
              Push enter to 'send'<br>
              <textarea id='mycon' onkeydown="keys(event)"></textarea>
              
              <div id="msg"></div>

              Quake like 控制台下方仅在 div-s 上 :)

              document.addEventListener('keyup', keys);
              
              let conShow = false
              
              function keys(e) {
                if (e.code == 'Backquote') {
                  conShow = !conShow;
                  mycon.classList.toggle("showcon");
                } else {
                  if (conShow) {
                    if (e.code == "Enter") {
                      conTextOld.innerHTML+= '<br>' + conText.innerHTML;
                      let command=conText.innerHTML.replace(/&nbsp;/g,' ');
                      conText.innerHTML='';
                      console.log('Send to server:', command); 
                    } 
                    else if (e.code == "Backspace") {
                      conText.innerHTML = conText.innerText.slice(0, -1);
                    } else if (e.code == "Space") {
                      conText.innerHTML = conText.innerText + '&nbsp;'
                    } else {
                      conText.innerHTML = conText.innerText + e.key;
                    }
              
                  }
                }
              }
              body {
                margin: 0
              }
              
              .con {
                display: flex;
                flex-direction: column;
                justify-content: flex-end;
                align-items: flex-start;
                width: 100%;
                height: 90px;
                background: rgba(255, 0, 0, 0.4);
                position: fixed;
                top: -90px;
                transition: top 0.5s ease-out 0.2s;
                font-family: monospace;
              }
              
              .showcon {
                top: 0px;
              }
              
              .conTextOld {
                color: white;
              }
              
              .line {
                display: flex;
                flex-direction: row;
              }
              
              .conText{   color: yellow; }
              
              .carret {
                height: 20px;
                width: 10px;
                background: red;
                margin-left: 1px;
              }
              
              .start { color: red; margin-right: 2px}
              Click here and Press tilde ` (and Enter for "send")
              
              <div id="mycon" class="con">
                <div id='conTextOld' class='conTextOld'>Hello!</div>
                <div class="line">
                  <div class='start'> > </div>
                  <div id='conText' class="conText"></div>
                  <div class='carret'></div>
                </div>
              </div>

              【讨论】:

                猜你喜欢
                • 2011-08-15
                • 2023-04-06
                • 1970-01-01
                • 2019-08-22
                • 2023-03-09
                • 1970-01-01
                • 1970-01-01
                • 2011-08-30
                相关资源
                最近更新 更多