0

toggleTestは関数です:

function toggleTest() {
    if(document.testRunning) {
        stopTest();
    } else {
        startTest();
    }
};

ボタンをクリックすると、次の行が有効になります。

<input type="button" onclick="toggleTest()" id="toggleBtn" value="Stop Test" /><br />

関数が定義されている場合にエラーUncaught ReferenceError: toggleTest is not definedが発生する理由がわかりません。

デモjsFiddle

すべてのコード:

<!DOCTYPE html>
<html>
<head>
<title>HTML5 Canvas Drawing Speed Tests</title>
<script type="text/javascript">
window.onload=function(){
window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       || 
          window.webkitRequestAnimationFrame || 
          window.mozRequestAnimationFrame    || 
          window.oRequestAnimationFrame      || 
          window.msRequestAnimationFrame     || 
          function( callback ){
            window.setTimeout(callback, 1000 / 60);
          };
})();
window.cancelRequestAnimFrame = ( function() {
    return window.cancelAnimationFrame          ||
        window.webkitCancelRequestAnimationFrame    ||
        window.mozCancelRequestAnimationFrame       ||
        window.oCancelRequestAnimationFrame     ||
        window.msCancelRequestAnimationFrame        ||
        clearTimeout
} )();

function toggleTest() {
    if(document.testRunning)
    {
        stopTest();
    }
    else
    {
        startTest();
    }
};

function changeTestType() {
    stopTest();
    startTest();
}

function startTest() {
    if(toggleBtn == "Start Test"){
        var radios = document.getElementsByName("testType");
                for(var i = 0; i < radios.length; i++)
                {
                    if(radios[i].checked == true)
                    {
                        document.testType = radios[i].id;
                        document.useRAF = true;
                        break;
                    }
                }
        if(document.useRAF){
            document.testInterval = setInterval(function() {runTest();}, 1000/60);}
            document.testRunning = true;    
            runTest();
        }
}

function stopTest() {
    if(!document.useRAF)
        clearInterval(document.testInterval);
    else
        cancelRequestAnimFrame(document.requestAnimFrameId);
    document.testRunning = false;
    document.getElementById("toggleBtn").value = "Start Test";
}

function runTest() {
    if(document.useRAF)
        document.requestAnimFrameId = requestAnimFrame(runTest);
        document.testType();
}

var ToggleBtn = document.getElementById("toggleBtn").value;
}
</script>
</head>
<body >
    <div id="canvasContainer" style="position: relative;">
        <canvas id="testCanvas" width="180" height="50" style="background-color:black">Sorry your browser doesn't support the HTML5 canvas!</canvas>
    </div>
    <div id="debugData" style="position: relative;">
        <div id="debugControls" style="position:absolute;top:60px;left:0">
            <form id="testForm">
            <input type="button" onclick="toggleTest()" id="toggleBtn" value="Stop Test" /><br />
            <label><input type="checkbox" id="rAF" onclick="changeTestType()" />Use requestAnimationFrame</label><br /><br />
            <label><input type="radio" onchange="changeTestType()" name="testType" id="functionA" />functionA</label><br />
            <label><input type="radio" onchange="changeTestType()" name="testType" id="functionB" />functionB</label><br />
            <label><input type="radio" onchange="changeTestType()" name="testType" id="functionC" />functionC</label><br />
            <label><input type="radio" onchange="changeTestType()" name="testType" id="functionD" />functionD</label><br />
            </form>
        </div>
    </div>
</body>
</html>
4

1 に答える 1

2

コードをwindow.onloadに配置すると、その関数スコープに関数とtoggleTest定義が作成されます。グローバルスコープに移動するだけですhttp://jsfiddle.net/TEt8R/1/

//change to be in body
于 2013-03-23T23:25:47.513 に答える