Javascript IE不会清除textarea值
再次回到我的框架。我有一个方法,它获取元素的值,在dom中清除元素的值,然后逐个字母地将其放回原处。在Chome、FF和IE 10中进行了测试。一切正常。但是IE有一个小问题。如果我在脚本执行时刷新页面,它不会清除元素的值。或者在那之后,没有什么区别Javascript IE不会清除textarea值,javascript,internet-explorer,frameworks,Javascript,Internet Explorer,Frameworks,再次回到我的框架。我有一个方法,它获取元素的值,在dom中清除元素的值,然后逐个字母地将其放回原处。在Chome、FF和IE 10中进行了测试。一切正常。但是IE有一个小问题。如果我在脚本执行时刷新页面,它不会清除元素的值。或者在那之后,没有什么区别 <textarea cols="60" id="textarea"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas suscipit lacu
<textarea cols="60" id="textarea">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas suscipit lacus non hendrerit cursus.
</textarea>
<script>
(function(){
(this[arguments[0]] = function selector(id){
if(!(this instanceof selector)) {
return new selector(id);
}
this.elm = document.getElementById(id);
}).prototype = {
type: function(delay) {
var elm = this.elm;
var status;
if ('value' in elm) {
var text = elm.value;
elm.value = "";
status = 0;
} else if ('innerHTML' in elm) {
var text = elm.innerHTML;
elm.innerHTML = "";
status = 1;
}
var letters = text.split("");
var counter = 0;
function write() {
if (counter < letters.length) {
switch (status) {
case 0: elm.value += letters[counter]; break;
case 1: elm.innerHTML += letters[counter]; break;
}
}
counter += 1;
}
setInterval(write, delay);
},
};
})('$');
$('textarea').type("100");
这是与IE相关的问题还是我在代码中遗漏了什么?我觉得可能是IE的问题,我很确定这是一个与IE相关的问题。IE 10试图做到用户友好,即使在页面刷新后,也能在文本区域保留更改后的输入文本 现在问题来了:在IE恢复上一页加载的文本之前,您的脚本已经尝试清除文本区域。因此,脚本会将新文本添加到旧文本中 因此,一个简单的解决方法是在启动typefunction和清除textarea之前给IE一点时间来恢复文本。但是,在IE覆盖文本区域之前,您必须获取文本区域的原始内容 我在查看代码时注意到:使用setInterval实现这种效果是个坏主意,因为即使在将完整文本写入textarea之后,函数也会一直运行和计数;您必须使用clearInterval 下面是已更正的代码更改注释。这适用于我的FF,IE 10和Chrome
(function(){
(this[arguments[0]] = function selector(id){
if(!(this instanceof selector)) {
return new selector(id);
}
this.elm = document.getElementById(id);
this.elm.setAttribute("autocomplete", "off");
}).prototype = {
type: function(delay) {
var elm = this.elm;
var status;
// Don't clear textarea here, won't have any effect; but get original textarea content
if ('value' in elm) {
var text = elm.value;
status = 0;
}
else if ('innerHTML' in elm) {
var text = elm.innerHTML;
status = 1;
}
var letters = text.split("");
var counter = 0;
var interval;
function write() {
if (counter < letters.length) {
switch (status) {
case 0: elm.value += letters[counter]; break;
case 1: elm.innerHTML += letters[counter]; break;
}
}
else {
// Clear timer
clearInterval(interval);
}
counter += 1;
}
setTimeout(function(){
// Clear textarea after waiting a little; using 0 as timeout value should be perfect, no need for higher values
if (status == 0) {
elm.value = "";
}
else {
elm.innerHTML = "";
}
interval = setInterval(write, delay);
}, 0);
},
};
})('$');
$('textarea').type("100");
这段代码似乎解决了这个问题,但也产生了另一个问题。如果在页面加载后,在页面打印文本之前(比如在中间)重新加载页面,它将不会打印整个文本。它在我加载页面的地方停止翻车。这发生在IE和FF中。在Chrome中,它工作正常。嗯,我没有测试它。^^下面是FF的一个解决方法:添加this.elm.setAttributeautocomplete,off;在选择器类的末尾,请参见。然而,我仍然在寻找一个同样适用于IE的解决方案。我已经编辑了我的答案,以提供一个更通用的解决方案;它现在应该在FF、IE 10和Chrome中工作。