2014-11-19 22 views
7

Bir javascript ile input veya textarea'un içeriğini düzenlemek için bir yol var mı ve bu değişiklik tarayıcının "geri al" komutuyla (örn. ctrl-Z) geri alınamaz mı?Bir metin girişini javascript ile düzenlemek ve Geri Al yığısına eklemek mümkün mü?

"Foo {0} bar" gibi bir dize, seçimdeki değere eklemeye çalışıyorum ve kullanıcı bir aralık seçtiyse, seçili aralık, dizenin yerine dizeye eklenir. "{0}".

Örneğin, textarea "Örnek 1 2 3" içeriyorsa ve imleç "Örnek 1 | 2 3" ise, işlev değeri "Örnek 1Foo blah bar 2 3" olarak değiştirir (valueIfNothingSelected "blah" " bu durumda). Eğer "1 2" aralığı seçildiyse, fonksiyon bunun yerine değeri "Örnek Foo 1 2 bar 3" e değiştirecektir.

Chrome'da bu işlevi test ettim ve yapması gerekenleri yapıyor, ancak değişikliği undo ile değiştiremiyorum. "Field.focus

document.execCommand("insertText", false, processedText); 

... ve hareketli:

function insertTextAtCursor(text, valueIfNothingSelected) { 
    var field = $('textarea[name="task_log_description"]')[0]; 
    var startPos = field.selectionStart; 
    var endPos = field.selectionEnd; 
    var processedText; 
    if (startPos == endPos) { 
     processedText = text.replace('{0}', valueIfNothingSelected); 
     field.value = field.value.substring(0, startPos) + processedText + field.value.substring(endPos, field.value.length); 
     field.selectionStart = startPos + text.indexOf('{0}'); 
     field.selectionEnd = field.selectionStart + valueIfNothingSelected.length; 
    } else { 
     var selectedText = field.value.substring(startPos, endPos); 
     processedText = text.replace('{0}', selectedText); 
     field.value = field.value.substring(0, startPos) + processedText + field.value.substring(endPos, field.value.length); 
     field.selectionStart = startPos + text.indexOf('{0}'); 
     field.selectionEnd = field.selectionStart + selectedText.length; 
    } 
    field.focus(); 
} 
+1

ctrl-z zaten Ubuntu 14.04'te Chrome + Firefox'ta benim için çalışıyor. Sizin için çalışmadığı durum nedir? – Jack

+0

@Jack Javascript yöntemimi eklemek için genişletilmiş soru. Hangi nedenle olursa olsun, bu yöntem kullanıldığında 'Ctrl-z' çalışmaz. –

+0

[Javascript textarea geri almayı reddet] 'ın olası kopyası (http://stackoverflow.com/questions/7553430/javascript-textarea-undo-redo) – Fraser

cevap

6

Birlikte "field.value = ..." satırları değiştirerek https://stackoverflow.com/a/10345596/1021426

çalışan bir çözüm buldu() "o satırdan önce, istediğim geri alma/yineleme işlevini başardım.

+0

Kendi sorunun çözüldüğü için bu cevabı kabul etmeyi unutmayın. Bu, cevapsız olarak görünmesini engeller. – GregL

+0

Şu andan itibaren 2 güne kadar kendi cevabımı kabul edemem. –

İlgili konular