jQuery textarea metni edinin


486

Son zamanlarda jQuery ile oynamaya başladım ve birkaç dersi takip ediyorum. Şimdi onu kullanmak konusunda biraz yetkin hissediyorum (oldukça kolay) ve web sayfamda bir 'konsol' yapabilseydim iyi olacağını düşündüm (olduğu gibi, FPS oyunlarında yaptığınız gibi `tuşuna basarsanız , vb.) ve ardından bir şeyler yapmak için Ajax'ın sunucuya geri dönmesini sağlayın.

Başlangıçta en iyi yolun sadece metni metin alanının içine almak ve sonra bölmek olduğunu düşündüm ya da keyup olayını kullanmalıyım, ASCII karakterine döndürülen anahtar kodunu dönüştürmeli, karakteri bir dizeye ekleyip dizeyi göndermeliyim (daha sonra dizeyi boşaltın).

Bir metin alanından metin alma hakkında herhangi bir bilgi bulamadım, tek istediğim keyup bilgisiydi. Ayrıca, döndürülen anahtar kodunu ASCII karakterine nasıl dönüştürebilirim?

Yanıtlar:


713

Neden tuş vuruşlarını metne dönüştürmek istersiniz? Tıklandığında metin alanının içindeki metni sunucuya gönderen bir düğme ekleyin. Metni daha önce işaret ettiği gibi value niteliğini kullanarak veya jQuery API'sını kullanarak alabilirsiniz:

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

2
Çünkü metin alanı sadece gereken metinden daha fazlasını içerecektir. (bu konsol, komut istemini görselleştirin). Val işlevi hakkında bilgi için teşekkürler. :)
RodgerB

Javascript kullanarak metni işleyebilirsiniz. Tuş vuruş kodlarını döndürmenin anlamı nedir?
Eran Galperin

Mesele, imo, tuş vuruş kodunu elde etmek, metin alanını bir sınırlayıcı ile bölmekten daha etkili olacaktır (muhtemelen büyük bir metin dizisini resmedin).
RodgerB

2
Maalesef, bunun doğru olacağı senaryoyu görselleştiremiyorum ... belki orijinal yayınınızı düzenlediyseniz ve bir örnek eklediyseniz, insanların cevaplamaya çalışmasına yardımcı olur
Eran Galperin

HTML etiketi kimliği önünde 'textarea' bölümünü unuttum
Yasith Prabuddhaka

36

Genellikle kullandığınız metin işlevi (örn. Div'de vb.) Olduğunda, metin alanı için val

almak:

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

Ayarlamak:

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

24

Yalnızca konsol iletilerini, yani önceki komutları ve çıktılarını içeren bir div öğeniz olmalıdır. Ve altına sadece yazdığınız komutu tutan bir girdi veya metin alanı koyun.

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

Bu şekilde, giriş kutusunun değerini işlemek için sunucuya gönderir ve sonucu konsol mesajları div öğesine eklersiniz.


Evet, tam olarak düşündüğüm şeydi. Çıktıdan girdiyi ayrıştırmayı (denemek için aptalca - kullanıcı bazı "çıktı" üzerine yazıyorsa) veya tuş vuruşu olaylarından bir dize oluşturmaya çalışmayı (denemek için aptalca) içermeyen tek temiz çözümdür. - backspaces vb. hakkında ne dersiniz?).
Nick Perkins

3
SO'daki başka bir XY sorunu. Bu, probleminin 'X'ine en iyi çözümdür.
Reimius

14

Normalde, değer özelliği

testArea.value

Yoksa ihtiyacın olan şeyde eksik olduğum bir şey var mı?


Aslında bir textchanged olay ya da çizgi boyunca bir şey çağrılacak umuyordum (bunu zaten keyup olay ile oldukça kolay yapabilirim). Sanırım keyup olayını kullanmaya devam edeceğim, ancak anahtar kodunu ASCII karakterine dönüştürmenin bir yolunu biliyor musunuz? Teşekkürler. :)
RodgerB

8

Ben aşağıdaki işlevi kullanarak olayın keyCode bir karaktere dönüştürebilir anladım:

var char = String.fromCharCode(v_code);

Oradan karakteri bir dizeye eklerdim ve enter tuşuna basıldığında dizeyi sunucuya gönderirim. Sorum biraz şifreli görünüyordu ve neredeyse tamamen konu dışı bir şey anlamına geliyor, üzgünüm sabah erken ve henüz kahvaltı henüz;).

Tüm yardımlarınız için teşekkürler çocuklar.


7

Methinks "konsol" kelimesi karışıklığa neden oluyor.

Eski tarz bir tam / yarı çift yönlü konsol taklit etmek istiyorsanız, şöyle bir şey kullanırsınız:

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

event.which tuşuna basıldı. Geri silme işlemi için event.which === 8.



0

Metin alanı değerini ve kod-char dönüşümünü okuyun:

Ve sadece div-s üzerinde güzel Quake gibi konsol :)


0

ad ve kimliğe göre textarea verileri alabilirsiniz

// 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();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.