2016-08-08 11 views
2

ユーザーに最小値と最大値を入力させたい場合は、最小から最大までの数値を生成して結果をクリップボードに保存します。数値を生成してクリップボードに書き込む

しかし、私はいつもUncaught ReferenceError: generateNumbers is not definedを得て、理由を説明できません。

window.onLoad = function() 
 
{ 
 
    function generateNumbers() 
 
    { 
 
    var min = document.getElementById("min").value; 
 
    var max = document.getElementById("max").value; 
 
    var result = ""; 
 

 
    for(var i=min; i < max; i++) 
 
    { 
 
     result = result + i + ";"; 
 
    } 
 
    copyToClipboard(result); 
 
    console.log(result); 
 
    } 
 

 
    function copyToClipboard(text) 
 
    { 
 
    window.prompt("Copy to clipboard: Ctrl+C, Enter", text); 
 
    } 
 
}
<label>MIN: </label><input type="text" id="min"/><br> 
 
<label>MAX: </label><input type="text" id="max"/><br> 
 
<button onclick="generateNumbers">send</button>

JSFIDDLE:https://jsfiddle.net/n303o8tz/1/

解決しようJSFIDDLE:https://jsfiddle.net/n303o8tz/4/

+2

ちょうどJavaScriptで 'addEventListener'を使用し、それは属性とスコープの周りいじるよりも簡単です。 – gcampbell

+5

window.onloadイベント内で関数を定義することに意味はなく、問題が発生しています。 – JJJ

+4

@ManoDestra 'generateNumbers'はグローバルスコープにありません。 – gcampbell

答えて

1

あなたはそのwindow.onload部分を削除し、単純で関数を呼び出す必要があります:onClick属性をボタンにイベントリスナを追加する代わりに使用することで、この問題を解決することが可能ですあなたのボタンのonclickハンドラ。

ここでそれを行うための一つの方法です:

<meta charset="UTF-8"> 
<script> 
function generateNumbers() { 
    var min = parseInt(document.getElementById("min").value); 
    var max = parseInt(document.getElementById("max").value); 
    var result = ""; 
    for (var i = min; i <= max; i++) { 
     result += i; 
     if (i < max) { 
      result += ";"; 
     } 
    } 

    console.log(result); 
    copyToClipboard(result); 
} 

function copyToClipboard(text) { 
    window.prompt("Copy to clipboard: Ctrl+C, Enter", text); 
} 
</script> 
<input id="min" type="text" value="1"> 
<input id="max" type="text" value="10"> 
<button onclick="generateNumbers()">Test</button> 
1

問題が機能generateNumbersがグローバルスコープにないこと、です。

document.getElementById("mybutton").addEventListener("click",generateNumbers); 
 
    
 
    function generateNumbers() 
 
    { 
 
    var min = document.getElementById("min").value; 
 
    var max = document.getElementById("max").value; 
 
    var result = ""; 
 

 
    for(var i=min; i <= max; i++) 
 
    { 
 
     result = result + i + ";"; 
 
    } 
 
    copyToClipboard(result); 
 
    } 
 

 
    function copyToClipboard(text) 
 
    { 
 
    window.prompt("Copy to clipboard: Ctrl+C, Enter", text); 
 
    }
<label>MIN: </label><input type="text" id="min"/><br> 
 
<label>MAX: </label><input type="text" id="max"/><br> 
 
<button id="mybutton">send</button>

+1

'document.getElementById(" mybutton ")に単純化する。addEventListener(" click "、generateNumbers);' –

+0

改善しました、ありがとう! – Black

関連する問題