[JS] Checkbox checked boolean werkt niet?

Pagina: 1
Acties:

  • Cyb
  • Registratie: Augustus 2002
  • Niet online
Kan iemand mij het volgende probleem uitleggen?

Als een checkbox uit is EN ik de checkbox.checked de waarde true of new Boolean(true) geef, gaat deze aan (zoals verwacht).

Als een checkbox aan is EN ik de checkbox.checked de waarde false geef, gaat deze uit (zoals verwacht).
Maar als een checkbox aan is EN ik de checkbox.checked de waarde new Boolean(false) geef, gebeurd er niks :?

Het lijkt dus alsof new Boolean(false) niet werkt bij een checkbox. Maar de expressie (false == new Boolean(false)) levert wel de waarde true op. Ik zou dus verwachten dat new Boolean(false) gewoon zou moeten werken.

Heeft iemand hier een verklaring hiervoor?

Hier wat testcode:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html>
<head>
<script type="text/javascript">

function f() {
   // werkt zoals verwacht
   document.getElementById("check1").checked = new Boolean(true); 
   document.getElementById("check2").checked = new Boolean(false);
    
   //document.getElementById("check1").checked = true;  // werkt als verwacht
   //document.getElementById("check2").checked = false; // werkt niet?????
                
   //alert(true == new Boolean(true)); // Geeft "true" in de alert
   //alert(false == new Boolean(false)); // Geeft "true" in de alert    
}

</script>
</head>
    
<body>
<form>
   <input type="checkbox" name="check1">Deze gaat aan bij de button-klik.<br>      
   <input type="checkbox" name="check2">Deze gaat aan bij de button-klik?!?!<br>
   <input type="button" onClick="f()" value="button">
</form>
</body>
</html>


Paste de code eventueel hier om snel te testen:
http://www.w3schools.com/...ame=try_dom_input_checked

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 20-02 21:06
de expressie new Boolean() levert altijd een Boolean-object met de waarde true op, welke parameter je ook meegeeft

Zie: http://www.devguru.com/Te...ipt/quickref/boolean.html
If there is no initial value [...], the initial value is false. Otherwise, even with the string "false", it is true.
Dit is dus omdat een boolean (lowercase) een primitief type is, en Boolean (uppercase) een object met daarin een verwijzing naar het primitieve type.. Dus als je hem print met een alert dan geeft hij wel false aan..
ofzoiets 8)7 snap het zelf ook niet helemaal :P tis laat :O

[ Voor 32% gewijzigd door HyperioN op 23-02-2006 04:28 ]


  • Cyb
  • Registratie: Augustus 2002
  • Niet online
HyperioN. schreef op donderdag 23 februari 2006 @ 04:18:
de expressie new Boolean() levert altijd een Boolean-object met de waarde true op, welke parameter je ook meegeeft[...]
Dat staat niet op die website.
If there is no initial value or if it is 0, -0, null, false, NaN, undefined, or the empty string (""), the initial value is false. Otherwise, even with the string "false", it is true.
Hier staat dat bij geen parameters of bij de opgegevens parameters, de waarde false is, en anders true.

Maar bij mijn probleem is het zo dat checkbox.checked raar gedrag vertoont bij alleen new Boolean(false).

Het probleem is dus nog niet verklaard.

[ Voor 5% gewijzigd door Cyb op 23-02-2006 04:30 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

JavaScript:
1
alert(false === new Boolean(false)); // false

;)

Uitleg: de Boolean constructor geeft een Boolean object terug dat een wrapper is voor de boolean value en geen primitive:
JavaScript:
1
2
3
4
5
var a = new Boolean(false);
var b = false;

alert(typeof a); // object
alert(typeof b); // boolean

om de primitive value van een object te verkrijgen kan je de valueOf() method gebruiken:
JavaScript:
1
2
var a = new Boolean(false);
alert(a.valueOf() === false); // true


overigens: getElementById en enkel name-attributes op je elements? Je test zeker alleen in IE? ;)

[ Voor 98% gewijzigd door crisp op 23-02-2006 09:07 ]

Intentionally left blank


  • Cyb
  • Registratie: Augustus 2002
  • Niet online
Thx voor de info! :)

Ik test inderdaad in IE

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 20-02 21:06
Cyb schreef op donderdag 23 februari 2006 @ 16:21:
Thx voor de info! :)

Ik test inderdaad in IE
Toch maar even in id veranderen dan.. Of nog beter: toevoegen.
Pagina: 1