jQuery รับข้อความ textarea


486

เมื่อเร็ว ๆ นี้ฉันเริ่มเล่นกับ jQuery และติดตามบทเรียนสองสามอย่าง ตอนนี้ฉันรู้สึกมีความสามารถเล็กน้อยเมื่อใช้มัน (มันค่อนข้างง่าย) และฉันคิดว่ามันจะเจ๋งถ้าฉันสามารถสร้าง 'คอนโซล' บนเว็บเพจของฉันได้ (เช่นเดียวกับคุณกดปุ่ม `เหมือนกับที่คุณทำในเกมFPSฯลฯ ) จากนั้นให้ Ajax กลับไปที่เซิร์ฟเวอร์เพื่อทำสิ่งต่างๆ

ตอนแรกฉันคิดว่าวิธีที่ดีที่สุดคือการได้รับข้อความภายใน textarea แล้วแยกมันหรือฉันควรใช้เหตุการณ์ keyup, แปลง keycode ที่ส่งคืนเป็นอักขระ ASCII ต่อท้ายอักขระเป็นสตริงและส่งสตริงไป เซิร์ฟเวอร์ (จากนั้นล้างสตริง)

ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับการรับข้อความจาก textarea สิ่งที่ฉันได้รับคือข้อมูลคีย์อัพ นอกจากนี้ฉันจะแปลงรหัสคีย์ที่ส่งคืนเป็นอักขระ ASCII ได้อย่างไร

คำตอบ:


713

ทำไมคุณต้องการแปลงลายเส้นสำคัญเป็นข้อความ? เพิ่มปุ่มที่ส่งข้อความภายใน textarea ไปยังเซิร์ฟเวอร์เมื่อคลิก คุณสามารถรับข้อความโดยใช้แอตทริบิวต์ value เป็นโปสเตอร์ก่อนที่จะชี้ให้เห็นหรือใช้ API ของ jQuery:

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

2
เพราะ textarea จะมีมากกว่านั้นเพียงแค่ข้อความที่ต้องการ (เป็นคอนโซลพร้อมรับคำสั่งภาพ) ขอบคุณสำหรับข้อมูลเกี่ยวกับฟังก์ชั่นวาล :)
RodgerB

คุณสามารถประมวลผลข้อความโดยใช้จาวาสคริปต์ จุดคืนรหัสของรหัสลับหลักคืออะไร
Eran Galperin

ประเด็นคือ, imo, การได้รับรหัสจังหวะสำคัญจะมีประสิทธิภาพมากขึ้นแล้วแยก textarea โดยตัวคั่น (รูปภาพอาจเป็นข้อความขนาดใหญ่อาร์เรย์)
RodgerB

2
ขออภัยฉันไม่เห็นภาพสถานการณ์ที่อาจเป็นจริง ... บางทีถ้าคุณแก้ไขโพสต์ต้นฉบับของคุณและเพิ่มตัวอย่างมันจะช่วยให้ผู้คนพยายามตอบคำถาม
Eran Galperin

ฉันลืม 'textarea' ส่วนหน้าของแท็ก html id
Yasith Prabuddhaka

36

ที่ซึ่งมักจะเป็นฟังก์ชั่นข้อความที่คุณใช้ (เช่นใน divs ฯลฯ ) จากนั้นสำหรับพื้นที่ข้อความมันเป็นวาล

จะได้รับ:

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

ตั้ง:

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

24

คุณควรมี div ที่เพิ่งมีข้อความคอนโซลนั่นคือคำสั่งก่อนหน้าและผลลัพธ์ของมัน และด้านล่างให้ใส่ข้อความหรือข้อความที่เพิ่งเก็บคำสั่งที่คุณพิมพ์

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

ด้วยวิธีนี้คุณเพียงแค่ส่งค่าของกล่องอินพุตไปยังเซิร์ฟเวอร์เพื่อประมวลผลและผนวกผลลัพธ์ไปที่ div ข้อความคอนโซล


ใช่สิ่งที่ฉันคิด มันเป็นทางเลือกเดียวที่สะอาดไม่มีส่วนแยกอินพุตจากเอาต์พุต (โง่ลอง - ถ้าผู้ใช้พิมพ์อะไรมากกว่า "เอาท์พุท") หรือพยายามสร้างสตริงจากเหตุการณ์การกดแป้น - แล้วแบ็คสเปซ ฯลฯ ล่ะ?)
Nick Perkins

3
ปัญหา XY อีกตัวเกี่ยวกับ SO นี่เป็นทางออกที่ดีที่สุดสำหรับ 'X' ของปัญหาของเขา
Reimius

14

โดยปกติมันเป็นคุณสมบัติที่คุ้มค่า

testArea.value

หรือมีบางอย่างที่ฉันขาดไปในสิ่งที่คุณต้องการ?


จริง ๆ แล้วฉันหวังว่าจะมีเหตุการณ์แบบเปลี่ยนข้อความหรือบางสิ่งบางอย่างในสายจะถูกเรียกใช้ (ฉันสามารถทำสิ่งนี้ได้อย่างง่ายดายด้วยเหตุการณ์ keyup ต่อไป) ฉันคิดว่าฉันจะใช้เหตุการณ์ keyup แต่คุณรู้วิธีแปลง keycode เป็น ASCII ถ่านหรือไม่ ขอบคุณ :)
RodgerB

8

ฉันพบว่าฉันสามารถแปลง keyCode ของเหตุการณ์เป็นตัวละครโดยใช้ฟังก์ชั่นต่อไปนี้:

var char = String.fromCharCode(v_code);

จากนั้นฉันก็จะผนวกอักขระไปยังสตริงและเมื่อกดปุ่ม Enter ส่งสตริงไปยังเซิร์ฟเวอร์ ฉันขอโทษถ้าคำถามของฉันดูค่อนข้างคลุมเครือและชื่อมีความหมายอะไรบางอย่างที่เกือบจะไม่สมบูรณ์มันเป็นตอนเช้าตรู่และฉันยังไม่ได้ทานอาหารเช้า;)

ขอบคุณสำหรับความช่วยเหลือทั้งหมดของคุณ


7

คิดคำว่า "คอนโซล" ทำให้เกิดความสับสน

หากคุณต้องการเลียนแบบเพล็กซ์เต็มรูปแบบ / ครึ่งเพล็กซ์คอนโซลคุณจะต้องใช้สิ่งนี้:

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

เหตุการณ์ที่มีรหัสที่ถูกกด สำหรับการจัดการแบ็คสเปซ event.which === 8



0

อ่านค่า textarea และการแปลงรหัสถ่าน:

และด้านล่างQuake ที่ดีเช่นคอนโซลบน div-s เท่านั้น :)


0

คุณสามารถรับข้อมูล 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();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.