[英]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.