2012-03-25 23 views
7

onpaste işlevi çağrıldığında bir textarea alanından değer okumayı denediğimde, alanın eski değerini (yapıştırma işleminden önceki işlem), yeni değeri değil (yapıştırma işleminden sonraki değer) alıyorum. operasyon). http://jsfiddle.net/qsDnr/Bir textarea giriş alanının yeni değeri yapıştırmaya nasıl alınır?

kodunun bir kopyası aşağıdaki gibidir:

<!DOCTYPE html> 
<html> 
<head> 
<title>On Paste</title> 
<script type="text/javascript"> 
var textareaElement; 
var previewElement; 

function update() 
{ 
    previewElement.innerHTML = textareaElement.value; 
} 

window.onload = function() { 
    textareaElement = document.getElementById('textarea'); 
    previewElement = document.getElementById('preview'); 
    textareaElement.onpaste = update  
} 
</script> 
</head> 
<body> 
<textarea id="textarea"> 
</textarea> 
<div id="preview"> 
</div> 
</body> 
</html> 

Aşağıdaki adımlarla davranışı doğrulayabilirsiniz İşte

bu davranışın bir tanıtımdır.

  1. Dize foo panonuza kopyalayın.
  2. Textarea alanına sağ tıklayın ve 'Yapıştır' seçeneğini seçin. Div öğesinde hiçbir şey görünmez.
  3. Textarea alanına sağ tıklayın ve tekrar 'Yapıştır'ı seçin. Div öğesinde foo görünür. Hep yapıştırma işlemi ile textarea elemanı güncellendi göstermek için div öğesi istediğim için

, istenen çıkış 2. adımda sırasıyla 3. adımda foo ve foo foo olduğunu. istenen çıktı almak için ben başarmış

bir yolu böylece bunun yerine

textareaElement.onpaste = function() { 
    window.setTimeout(update, 100); 
}; 

bu sefer (demo var

textareaElement.onpaste = update  

arasında, window.setTimeout() ile update() işlev çağrısını geciktirerek geçerli: http://jsfiddle.net/cwpLS/). Bu istediğimi yapar. Ancak, bu, istediğimi yapmanın basit bir yolundan ziyade bir çözüm gibi görünüyor. Bunu yapmak için alternatif ya da daha iyi bir yol olup olmadığını bilmek istiyorum.

+0

[Bu olay] (https://developer.mozilla.org/en/DOM/element.onpaste) kullanıcı * metni yapıştırmak için * girişimde bulunduğunda - metin yapıştırılmadan önce bu on macunun tetiklendiği anlamına gelebilir. – Joseph

+0

'event.clipboardData.getData ('text/plain')' içerik almayı sağlar, yapıştırılır, ancak her tarayıcıda mevcut olduğundan emin değilim ve mevcut metin ve seçim de dikkate alınmalıdır. Korkarım, zaman aşımını kullanmalı veya 'onkeyup' /' onmouseup' komutunu izlemelisiniz. – kirilloid

+0

@Joseph Katılıyorum.Çözmeyi denediğim problemin, bu yazımda açıkladığım gibi "setTimeOut" ile veya bu sorunu çözmenin daha iyi yolları varsa çözülmeye çalışıyorum. –

cevap

3

İstediğiniz efekti elde etmenin tek yolu olanTimeout çözümünün ayarlandığından ya da tarayıcı nesnesine erişmeye çalıştığınızdan eminsiniz - tarayıcılar arası tarayıcılar için çapraz tarayıcıdan geçiyorsunuz.

0

Çapraz tarayıcıda bunu yapmak için doğrudan bir yol yoktur. Firefox'taki davranış hakkında aşağıdaki bağlantıya bakın.

Mozilla

anda yapıştırılan metni elde etmek hiçbir DOM-tek yolu var; Bu bilgileri almak için bir nsiclipboard kullanmanız gerekecek.

Ayrıca diğer olasılıklar hakkında görüşmek üzere stackoverflow link'a da bir göz atın.

İlgili konular