2016-11-02 8 views
0

少し質問がありますが、値の範囲内でランダムに何かを決定する巨大な計算を実行しようとしています。ユーザーがこの範囲を自分で決めて、最大値または最小値を追加したいと思うようにします。基本的には今のところすべて動作しますが、最初にif文を入れて、正しい質問をするためにチェックボックスがチェックされているかどうかチェックしています。問題は、私が今書いているように、プログラムを読むことが不可能になるということです。単に何もしません。表示されたエラーメッセージは次のとおりです。
チェックボックスをオンにした場合の文は?

Uncaught TypeError: Cannot read property 'checked' of null(…).

私はいくつかのことを試してみました、と私は値を設定する際に自分自身を、それが動作するので、問題は本当に「IF」文です。

var maxdesiredvalue, mindesiredvalue; 

        if (document.getElementById("min").checked == false) { 
         mindesiredvalue = 0.00 
        } 
        else { 
        mindesiredvalue = window.prompt("Valeur minimale désirée:"); 
        mindesiredvalue = parseInt(mindesiredvalue)} 

        if (document.getElementById("max").checked == false) { 
         maxdesiredvalue = 9999999.99 
        } 
        else { 
        maxdesiredvalue = window.prompt("Valeur maximale désirée:"); 
        maxdesiredvalue = parseInt(maxdesiredvalue)} 

     function RandWeap() { 
      /*Huge function here determining a value and repeating until it 
      is between mindesiredvalue and maxdesiredvalue*/ 
     } 

チェックボックスは、次のように書かれている:ここに私のグローバルVARSと仕事をdoesntの部分がある

<body> 
    <form> 
    <i> Press F5 to clear or to get 1 random weapon </i> <br> <br> 
    Min price: <input type="checkbox" id="min"> <br> 
    Max price: <input type="checkbox" id="max"> <br> <br> 
    <button type="button" onclick="RandWeap()">Add a random weapon to list</button> 
    </form> 
</body> 

それがどのように働いて得るためにの任意のアイデア?

ありがとうございました!

<html> 
<meta charset="utf-8"> 
<script type="text/javascript" language="JavaScript"> 

var desiredResult; 

desiredResult = (parseInt(window.prompt("Valeur désirée"))) 

    function dice(){ 

    var result, missed; 

    result = (Math.floor(Math.random() * 6) + 1) 

    if (desiredResult == result) {document.body.innerHTML += result} 
    else if (desiredResult != result) {dice()} 

    } 

window.onload = dice 

</script> 
<body> 
    Choose value: <input type="checkbox" id="choose"> <br> <br> 
    <button type="button" onclick="dice()">Roll dice!</button> 
</body> 
</html> 

だから我々が所望の値を求め、その後、繰り返しますので、基本的に私たちは似たようなのexempleを与えるが、本当に簡素化することができた場合、それは次のようになり

EDIT

よし、それが私たちの希望する値になるまで機能します。チェックボックスがcheckeの場合のみ、このコードを編集して必要な値をプロンプトするようにしてください。もちろん、onloadはチェックされないので、ランダム値だけを入力します。次に、ボタンをクリックするとこのステップが繰り返されますが、直前のボックスにチェックマークを付けると、希望の値が表示されます。私はそれが明確かどうか確信していません...しかし、基本的に私が知りたいことです。誰かが私が追加する必要があるコードのアイデアを持っている場合、非常にいいです!

+1

は思えます。つまり、ページが読み込まれたときにのみ実行されます。 – Pointy

+0

まあ、ちょうど@pointyが言った。このスクリプトはどこに文書に含まれていますか? –

+0

'this.target'で' click'のようなイベントを使って、入力がチェックされているかどうかを調べることができます。 –

答えて

0
あなたは clickイベントに :checkedセレクターを使用することができますjQueryのオン

var isCheckedWithGlobalVariable = false; 
var elements = document.querySelectorAll('input[type=checkbox]'); 
for (var i = 0; i < elements.lenght; i++) { 
    elements[i].onclick = function() { 
     if (this.checked == true) { 
      // checked 
      isCheckedWithGlobalVariable = true; 
     } 
    }; 
} 

私は、あなたのスクリプトがあなたの頭のセクションか身体の上のどちらかにインラインであると仮定していますか?もしそうなら、問題はあなたのチェックボックスがスクリプトの実行時に存在しないということです。

おそらくあなたは、ユーザーが次の操作を行う必要があり、その場合には、ボタンをクリックしたときにプロンプ​​トを表示します:

a)の機能であなたのメインの「取得最小/最大」のコードをラップし、 b)のコールあなたのボタンのクリックでその機能。

ようなので:

var maxdesiredvalue, mindesiredvalue; 

function getMinMax() { 
    if (document.getElementById("min").checked == false) { 
    mindesiredvalue = 0.00 
    } else { 
    mindesiredvalue = window.prompt("Valeur minimale désirée:"); 
    mindesiredvalue = parseInt(mindesiredvalue) 
    } 

    if (document.getElementById("max").checked == false) { 
    maxdesiredvalue = 9999999.99 
    } else { 
    maxdesiredvalue = window.prompt("Valeur maximale désirée:"); 
    maxdesiredvalue = parseInt(maxdesiredvalue) 
    } 
} 

function RandWeap() { 
    getMinMax(); 
    alert("Min: " + mindesiredvalue + " Max: " + maxdesiredvalue); 
    //Huge function here determining a value and repeating until it 
    //is between mindesiredvalue and maxdesiredvalue 
} 

は、よりエレガントな解決策がありますが、これはそれの本質です。ここ

JSフィドル:そのコードは、イベントハンドラにする必要がありますようにhttps://jsfiddle.net/ebwxcvg9/

1

eventonclickのように使用できます。クリックeventを使用して、純粋なJavaScriptで

例:

var isCheckedWithGlobalVariable = false; 
document.getElementById('myInput').onclick = function() { 
    if (this.checked == true) { 
     // the element is checked 
     isCheckedWithGlobalVariable = true; 
    } 
}; 

たぶん、あなたは、あなたがforquerySelectorAllを使用することができますので、複数の要素でこれを使う必要があります。 例:

var isCheckedWithGlobalVariable = false; 
$('#myInput').click(function() { 
    if ($(this).is(':checked')) { 
     // checked 
     isCheckedWithGlobalVariable = true; 
    } 
}) 

OR

var isCheckedWithGlobalVariable = false; 
$('#myInput:checked').click(function() { 
    // only if it is checked 
    isCheckedWithGlobalVariable = true; 
}) 

、または複数の要素を持つ:

var isCheckedWithGlobalVariable = false; 
$('input').click(function() { 
    if ($(this).is(':checked')) { 
     // this element is checked 
     isCheckedWithGlobalVariable = true; 
    } 
}) 
+0

しかし、私はこれらのヴァースをグローバルにしたいと思います。チェックボックスの希​​望の値(最大または最小)onclickをプロンプトしようとすると、プロンプトされたvarはグローバルなものになりますか? –

+0

はい、私は答えをグローバル変数で更新できます。どうか、変数を使って –

関連する問題