设置和删除只读JavaScript - 无法同时执行这两项操作

时间:2012-11-24 00:09:42

标签: javascript settimeout readonly

所以这是我第一次尝试JavaScript(学习Java atm)而且我差不多完成了。我想要做的是:在页面刷新时从我的textarea中删除readonly,并在几分钟后将其设置为只读定时器。

所有的定时器,getElement-parts和readOnly属性似乎都在工作(最后)。

JavaScript的:

<script>
//x = Timelimit in minutes, z = Time remaining alert in minutes
function timeLimit(x,z) {
    var min = 60 * 1000;
    var limit = x * min;
    setTimeout(function(){ alert("Du har " + z + " minutter igjen på prøven.") },( limit - (z * min) ));
    setTimeout(function(){ alert(x + " minutter har gått.\nTiden er slutt.") },limit);
    setTimeout(document.getElementById('testroom').setAttribute('readOnly','readOnly'),limit);
}
</script>

这是对我的函数的调用(把它放在我的textarea下面,因为它似乎是getElement通过id找到我的textarea的唯一方法):

    <form method="post" action="insert.php" />
        <textarea name="content" id="testroom"></textarea><br>
        <input type="submit" value="Send inn for retting" />
    </form>

<script>
timeLimit(0.2,0.1);
document.getElementById('testroom').removeAttribute("readOnly",0);
</script>

如果我将removeAttribute移到timeLimit()之上(或将其放在函数内),我的textarea将保持readonly = true。如果我把它放在下面,它将保持readonly = false,即使在12秒后(0.2分钟,计时器应该发生)。

希望有人可以为我清除这一点,一直在寻找尝试很多不同的语法。

1 个答案:

答案 0 :(得分:5)

你的第三个setTimeout()调用没有做你想要的。而是立即执行.setAttribute()方法。你应该将它包装在一个函数中,以便以后执行它。

setTimeout(function(){ alert(x + " minutter har gått.\nTiden er slutt.") },limit);
setTimeout(function(){document.getElementById('testroom').setAttribute('readOnly','readOnly')},limit);

更好的是,您可以将两者结合起来,但请务必先将setAttribute调用,这样用户就不会在糟糕的时间偷偷杀死您的JavaScript:

setTimeout(function(){
    document.getElementById('testroom').setAttribute('readOnly','readOnly');
    alert(x + " minutter har gått.\nTiden er slutt.");
},limit);