[英]HTML/JavaScript: How to make default text of a <textarea> undeletable?
有沒有辦法讓<textarea>
輸入的默認文本被用戶取消刪除? 例如,如果我們有這樣的<textarea>
:
<textarea>I like/dislike this site because</textarea>
用戶應該能夠完成“我喜歡/不喜歡這個網站因為”句子,但永遠無法刪除這部分。
我知道這個問題有更簡單的方法,但我被要求這樣做。 此外,目標網站使用原型javascript框架,因此它必須涉及原型或沒有框架。 jQuery無法使用,因為它會導致與原型沖突。
提前謝謝了。
你可以讓它看起來像是textarea的一部分,即使它不是。
我會假裝它。 它很臟但你無法刪除默認文本: http : //jsfiddle.net/2EMkF/3/ 。
function $(id) {return document.getElementById(id);}
$('s').addEventListener('click', function() {
$('t').setSelectionRange(33, 33)
$('t').focus();
});
$('t').addEventListener('keyup', function() {
if($('t').value.substring(0, 33) != ' '.times(33)) {
$('t').value = ' '.times(Math.max(
33, $('t').value.firstspace())
)
+ $('t').value.fromnospaces();
$('t').setSelectionRange(33,33);
}
});
function t() {
if(this.selectionStart < 33) this.setSelectionRange(33,33);
}
$('t').addEventListener('keyup', t);
$('t').addEventListener('click', t);
String.prototype.times = function(n) {
var r = "";
for(var i = 0; i < n; i++) r += this;
return r;
}
String.prototype.firstspace = function() {
for(var i = 0; i < this.length; i++)
if(this[i] != ' ')
return i;
return -1;
}
String.prototype.fromnospaces = function() {
return this.substring(this.firstspace());
}
如果用戶更改后該代碼不存在,此代碼會將默認文本返回到文本字段的開頭:
<script type="text/javascript">
function fixText()
{
var textAreaElement = document.getElementById("mytextarea");
var searchPhrase = "I like/dislike this site because";
if(textAreaElement)
{
if(textAreaElement.value.indexOf(searchPhrase) != 0)
{
textAreaElement.value = searchPhrase + " " + textAreaElement.value
}
}
}
</script>
<textarea id="mytextarea" onblur="fixText();" onchange="fixText();">I like/dislike this site because</textarea>
我在一兩分鍾左右把它扔到一起,它有一些明顯的缺陷,例如如果有人只刪除了一些默認文本,他們可能會得到一個奇怪的結果,比如“我喜歡/不喜歡這個網站,因為我喜歡這個網站,因為它很好“。 但我相信你可以操縱它以使其更有效。 像這樣的東西可能與pimvdb的答案結合起來。
我喜歡Elian Ebbing的答案,如果你的雇主允許你這樣做的話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.