2013-08-19 129 views
2

我在HTML/JavaScript中製作終端窗口,並使用textarea進行輸入。我想阻止textarea中的文本部分被刪除。例如,如果我在textarea「C:\> Random Code」中有文本,我想阻止用戶刪除「C:\>」文本。這可能使用JavaScript?HTML textarea防止刪除一些文本

+1

也許你可以使用你的textarea的onchange事件來檢查它的內容的長度,那麼如果內容更小,並且內容不是以「C:>」開頭的,你可以替換字符串? – Sebastien

回答

3

你不能製作一段textarea不可編輯的(只有整個控件)。

您可以使用各種JavaScript的詭計(聽按鍵事件,如果用戶想這樣做,你不希望允許使用的東西取消event.preventDefault事件)

另一種方案是,而不是有一個不可輸入的部分,自動將預定義的字符串追加(或預先)到用戶輸入(並以某種方式顯示給用戶)。

更新:

所以,我的解決辦法是這樣的:

var requiredText = 'C:>'; 
$('textarea').on('keyup',function(event) { 
    if (GetSelectionStart(this) < requiredText.length){ 
event.preventDefault(); 
event.stopPropagation(); 
} 

} 

哪裏GetSelectionStart是告訴選定的文本(或插入位置的開頭的函數,如果沒有選中的文本範圍)。對於一些可能的實現,請參閱e。 G。 Caret position in textarea, in characters from the start

該函數假定requiredText始終位於字符串的開頭。但是,當然,它可以適應更復雜的場景。

2

假設jQuery的,這個腳本會監聽按鍵,並且如果有必要的文字不能被發現(即:用戶試圖刪除),將自身添加右後衛有:

var requiredText = 'C:>'; 
$('textarea').on('input',function() { 
    if (String($(this).val()).indexOf(requiredText) == -1) { 
     $(this).val(requiredText); 
    } 
} 
+0

哇,這很好!我從來沒有想過我可以使用indexOf這種方式!這很酷且有用。謝謝! – Sebastien

+0

此代碼僅檢查輸入文本中是否存在requiredText;然而,它不檢查:1)文本以requiredText開頭(因爲在這種情況下是必需的)2)可以破壞用戶輸入,例如, G。 「C:> somefolder/somefile.txt」是輸入值,用戶刪除「:>」=> textarea的新值將是「C:>」 - 從用戶的角度來看,這可能真的令人沮喪恕我直言 –