jQuery获取textarea文本

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于jQuery获取textarea文本的主要内容,如果未能解决你的问题,请参考以下文章

jquery 获取textarea文本值详解

使用 javascript 或 Jquery 获取 textarea 文本

jQuery获取textarea文本

jquery 获取textarea文本值详解

如何在 Internet Explorer 7 中使用 jQuery 获取 textarea 中的选定文本?

尝试在 textarea 控件中显示 HTML 文本