[IE vs FF] IE checkbox.checked probleem

Pagina: 1
Acties:

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
Doormiddel van javascript voeg ik op sommige gedeeltes van een project dynamisch elementen toe, en hier zitten ook form elementen zoals een input (type checkbox) bij. Nu wil ik deze graag standaard aanvinken en zet dus meteen de waarde checked op true. Alles werkt prima oner IE en FF behalve het aanvinken van de checkbox; dit werkt in IE niet!

Nu heb ik vanalles geprobeerd:
  • .checked = 'true';
  • .checked = true;
  • .setAttribute( 'checked', true );
  • .setAttribute( 'checked', 'true' );
  • Bovenstaande variaties met hoofdletter C
  • GoT gezocht en gevonden
  • Google gezocht maar niks behulpzaams gevonden
maar niks mag baten. Dit terwijl document.getElementById('check_1').checked = true; wel gewoon werkt!! Misschien doe ik iets ongeloofelijk doms, maar alle bovenstaande methoden werken in FF dus zo verkeerd kunnen die niet zijn!

Hieronder een testscript waarmee mn probleem reproduceerbaar is, het is niet direct vergelijkbaar met de echte code, maar is wel een goed testbestand
HTML:
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
28
29
30
31
32
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Testpage</title>

    <script type="text/javascript">
        var insertId     = 1;

        function testNode( parentNode ) {
            this.parentNode        = parentNode;
            this.oCheckbox         = document.createElement("input");
            this.oCheckbox.id      = 'check_' + insertId++;
            this.oCheckbox.type    = 'checkbox';
            this.oCheckbox.checked = true;

            this.parentNode.appendChild(this.oCheckbox);
        }
    </script>
</head>
<body>
    <h1>Testing checkboxes</h1>
    <div id="testArea"></div>
    <p onclick="document.getElementById('check_1').checked = true;"
       style="text-decoration:underline;">Check the first checkbox</p>
    <script type="text/javascript">
        new testNode( document.getElementById('testArea') );
        new testNode( document.getElementById('testArea') );
        new testNode( document.getElementById('testArea') );
    </script>
</body>
</html>

Verwijderd

moet het niet 'on' zijn?

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Hoe kom je bij deze fantastische ingeving? ;)


Het zou bijna op een render-bug lijken, want het attribuut wordt wel netjes gezet (en is ook opvraagbaar ;))

[ Voor 27% gewijzigd door BtM909 op 21-01-2005 10:25 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Cyphax
  • Registratie: November 2000
  • Nu online

Cyphax

Moderator LNX
Moet ie niet eerst een name hebben trouwens?
Dat zal het wel niet zijn ;)

[ Voor 31% gewijzigd door Cyphax op 21-01-2005 10:27 ]

Saved by the buoyancy of citrus


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Ben je al eens wezen [google=Javascript enable disable radio buttons]...

Je vind daar legio javascript voorbeelden hoe je radiobuttons kan selecteren e.d.

  • Cyphax
  • Registratie: November 2000
  • Nu online

Cyphax

Moderator LNX
Als ik dit set:
this.oCheckbox.defaultChecked = true;
checked ie ze in ieder geval vast wel. Maar hij returned wel false als ik daarna checked opvraag...

Dit werkt hier (IE 6):
code:
1
2
3
4
5
6
7
8
9
        function testNode( parentNode ) {
            this.parentNode        = parentNode;
            this.oCheckbox         = document.createElement("input");
            this.oCheckbox.id      = 'check_' + insertId++;
            this.oCheckbox.type    = 'checkbox';
            this.oCheckbox.defaultChecked = true;
            this.oCheckbox.checked = true;
            this.parentNode.appendChild(this.oCheckbox);
        }
Geeft ook in Firefox geen fouten.

[ Voor 75% gewijzigd door Cyphax op 21-01-2005 10:33 ]

Saved by the buoyancy of citrus


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

JavaScript:
1
2
this.oCheckbox.defaultChecked = true
this.oCheckbox.checked = true;

Dit is dan de oplossing :?

Maar ben er bijna van overtuigd dat het anders moet kunnen, heb het ooit een keer toegepast..

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

defaultChecked is idd the way to go. Zie http://www.w3.org/TR/2003...0109/html.html#ID-6043025

edit:
Tenzij het element al gerenderd is. Als je de appendChild eerst doet, en daarna de checked attribute aanpast gaat het wel zoals je verwacht.

[ Voor 40% gewijzigd door drm op 21-01-2005 11:07 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
@Digicom:
Nee, het moet true zijn. 'on' is wel de waarde die het php script krijgt.

@Cyphax:
Nee, dit is pas belangrijk als je een form gaat submitten, de volledige code had wel een name maar hier kwam het probleem vandaan.

@Woudloper:
Heb ik gedaan, maar deze voorbeelden voegen niet dynamisch een element toe. Eenmaal in de DOM tree kan ik wel checked op true zetten mbv javascript. (zie ook mijn voorbeeldcode uit de TS)

@Cyphax (2de post):
Bedankt, dat werkt!
En bij mij returned het attribuut checked netjes true...

@BtM909:
Kom je een andere manier tegen; laat het me weten!

@drm:
Inderdaad, dat had ik ook gezien dat na het appenden ik wel de waarde in kon stellen. Beetje vreemd :?

De werkende oplossing is dus .defaultChecked = true;

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

drm schreef op vrijdag 21 januari 2005 @ 11:06:
defaultChecked is idd the way to go. Zie http://www.w3.org/TR/2003...0109/html.html#ID-6043025

edit:
Tenzij het element al gerenderd is. Als je de appendChild eerst doet, en daarna de checked attribute aanpast gaat het wel zoals je verwacht.
Kijk dat is de reden, waarom het bij mij wel werkte zoals verwacht :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Topicstarter
Die w3c link had ik zelf trouwens ook moeten kunnen vinden |:( 8)7
*Meer zelfpijniging symbooltjes nodig*

[ Voor 6% gewijzigd door RwD op 21-01-2005 12:08 ]

Pagina: 1