2016-11-02 6 views
0

Eine kleine Frage hier, ich versuche, eine riesige Berechnung auszuführen, die etwas zufällig in einem Wertebereich bestimmen wird. Ich möchte, dass der Benutzer diesen Bereich selbst bestimmt und sich entscheiden kann, ob er einen Höchstwert oder einen Mindestwert hinzufügen möchte. Grundsätzlich funktioniert alles jetzt, aber ich versuche am Anfang eine "if" -Anweisung zu setzen, um zu prüfen, ob die Checkboxen aktiviert sind oder nicht, um die richtigen Fragen zu stellen. Das Problem ist, die Art, wie ich es gerade schreibe, macht es unmöglich, das Programm zu lesen: es tut einfach nichts. Die Fehlermeldung angezeigt wird:
Wenn Anweisung, wenn Checkbox aktiviert ist?

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

ich ein paar Dinge ausprobiert, und wenn ich die Werte selbst gesetzt, es funktioniert, so dass das Problem ist wirklich die „if“ Anweisung. Hier sind meine globalen Variablen und der Teil, der nicht funktioniert:

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*/ 
     } 

Die Kontrollkästchen werden wie folgt geschrieben:

<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> 

Jede Idee, wie um es zu arbeiten?

Vielen Dank!

EDIT

Okay, also im Grunde, wenn wir eine exemple von etwas ähnliches, aber wirklich vereinfacht geben kann, es würde wie folgt aussehen:

<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> 

So veranlassen wir einen gewünschten Wert, und wiederholen Sie dann die Funktion bis sie unser gewünschter Wert ist. Nun, was sollten die Änderungen an diesem Code sein, damit er nur dann den gewünschten Wert anzeigt, wenn ein Kontrollkästchen aktiviert ist? Also, onload, natürlich, würde es nicht überprüft werden, so würde es nur den zufälligen Wert eingeben. Wenn wir dann auf einen Knopf klicken, wiederholt sich dieser Schritt, aber wenn wir das Kästchen kurz vorher ankreuzen, wird der gewünschte Wert angezeigt. Ich bin mir nicht sicher, ob es klar ist ... aber im Grunde will ich das wissen. Wenn jemand eine Idee von dem Code hat, den ich hinzufügen muss, wäre sehr nett!

+1

Scheint, wie der Code in einem Event-Handler sein sollte. So wie es ist, wird es nur ausgeführt, wenn die Seite geladen wird. – Pointy

+0

Ja, genau was @point gesagt hat. Wo ist dieses Skript in Ihrem Dokument enthalten? –

+0

Sie können Ereignisse wie 'click' mit' this.target' verwenden, um zu sehen, ob die Eingabe aktiviert ist. –

Antwort

0

Ich gehe davon aus, dass Ihr Skript entweder in Ihrem Kopfbereich oder an der Spitze des Körpers inline ist? Wenn dies der Fall ist, besteht das Problem darin, dass Ihre Kontrollkästchen zum Zeitpunkt der Skriptausführung nicht vorhanden sind.

Vermutlich möchten Sie auffordern, wenn der Benutzer auf die Schaltfläche klickt, in dem Fall, dass Sie Folgendes tun sollten:

a) Wickeln Sie Ihre Haupt „erhalten min/max“ Code in einer Funktion und b) Aufruf diese Funktion in Ihrem Button klicken.

Wie so:

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 
} 

Es gibt elegantere Lösungen, aber das ist die Essenz davon.

JS Fiddle hier: https://jsfiddle.net/ebwxcvg9/

1

Sie können die event wie onclick verwenden. mit

Beispiel mit reinem Javascript klicken event:

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

Vielleicht brauchen Sie diese verwenden, um auf mehrere Elemente, so dass Sie querySelectorAll mit for verwenden können. Beispiel:

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; 
     } 
    }; 
} 

auf jQuery Sie :checked Wähler mit click Ereignis verwenden können:

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

ODER

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

oder mit mehreren Elementen:

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

Aber ich frage mich ... Ich möchte diese Vars global sein. Wenn ich versuche, den gewünschten Wert (max oder min) beim Anklicken des Kontrollkästchens zu aktivieren, wird die Eingabeaufforderung var eine globale sein? –

+0

ja du kannst, ich aktualisiere meine Antwort mit 'globalen Variablen'. Bitte sehen Sie, wie es Variablen verwendet –

Verwandte Themen