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(/ /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 + ' '
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文本的主要内容,如果未能解决你的问题,请参考以下文章
使用 javascript 或 Jquery 获取 textarea 文本