0

ですから、これはJavaScript(Java atmの学習)での私の最初の試みであり、ほぼ終了しています。私がしたいのは、ページの更新時にテキストエリアから読み取り専用を削除し、数分後にタイマー付きの読み取り専用に設定することです。

すべてのタイマー、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>

これが私の関数の呼び出しです(getElementがidで私のテキストエリアを見つける唯一の方法であるように見えたので、それを私のテキストエリアの下に置いてください):

    <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のままになります。以下に示すと、12秒後(タイマーが発生するはずの0.2分)でもreadonly=falseのままになります。

うまくいけば、誰かが私のためにこれをクリアして、たくさんの異なる構文を試していることを探しています。

4

1 に答える 1

5

3番目のsetTimeout()呼び出しは、期待どおりに機能していません。代わりに、.setAttribute()メソッドをすぐに実行しています。後で実行できるように、関数でラップする必要があります。

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

さらに良いことに、この2つを組み合わせることができますが、ユーザーが悪いときにJavaScriptをこっそり殺さないように、必ずsetAttribute呼び出しを最初に配置してください。

setTimeout(function(){
    document.getElementById('testroom').setAttribute('readOnly','readOnly');
    alert(x + " minutter har gått.\nTiden er slutt.");
},limit);
于 2012-11-24T00:15:29.590 に答える