Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[js]dynamisch textbox maken geeft unknown error IE

Pagina: 1
Acties:

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ik ben bezig met dynamisch forms maken.
Dit doe ik omdat mensen zelf de forms kunnen samenstellen voor hun site. (bv eigen contact formulier enz)
Nu werkt mijn script voor het maken van een text box perfect in FF maar niet in IE 7. Ik kom er niet meer uit. Want overal op internet (ook hier) staan de voorbeelden zoals ik het nu doe.
code:
1
2
3
4
 this.TextBox = document.createElement('input');
 this.TextBox.type='Text';
 this.TextBox.name = "box1";
 this.TextBox.id = "box1";

Ik het input met een hoofdletter geprobeert. Ook text met kleine en hoofdletter maar niks lukt. IE geeft al de foutmelding Bij de createElement
Nu kan ik wel een hidden textfield (style.display:none) toevoegen en dat object clonen. Dat werkt wel. Maar het liefste wik ik het gewoon via DOM doen. Doe ik echt wat fout? 8)7 Ik snap er niks meer van :?

Jochemmol


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

- 'de foutmelding' :?
- Wat is Textbox?

[...]
niet relevante meuk weggehaald

Ik zie in bovenstaande code nergens dat je middels appendChild het control ergens aan toevoegt.

[ Voor 185% gewijzigd door TeeDee op 22-07-2008 15:22 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Dat klopt. Ik heb de appendChild er niet bij staan. Ik krijg direct bij het create element al de error.
Een text box is input type text.

Message: Unknown runtime error
Line: 35
Char: 3
Code: 0
URI: http://korenserver/jochem/ide/form.php

Jochemmol


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

Jochemmol schreef op dinsdag 22 juli 2008 @ 15:30:
Dat klopt. Ik heb de appendChild er niet bij staan. Ik krijg direct bij het create element al de error.
Een text box is input type text.

Message: Unknown runtime error
Line: 35
Char: 3
Code: 0
URI: http://korenserver/jochem/ide/form.php
Dus jij voegt een input type=text door middel van createElement toe aan een input type=text?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

IE is een achtelijke browser, voor form-elementen met een name-attribuut moet je dit doen:

JavaScript:
1
2
3
this.TextBox = document.createElement('<input name=box1>');
this.TextBox.type = 'text';
this.TextBox.id = 'box1';

(wel even branchen op een betrouwbare manier aangezien dit natuurlijk weer niet werkt in standards-compliant browsers :P)

Intentionally left blank


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

crisp schreef op dinsdag 22 juli 2008 @ 15:35:
IE is een achtelijke browser, voor form-elementen met een name-attribuut moet je dit doen:

JavaScript:
1
2
3
this.TextBox = document.createElement('<input name=box1>');
this.TextBox.type = 'text';
this.TextBox.id = 'box1';

(wel even branchen op een betrouwbare manier aangezien dit natuurlijk weer niet werkt in standards-compliant browsers :P)
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Add to Dom</title>
<script type="text/javascript">
function add()
{
    var cont=document.getElementById('containert');
    var bpxcont = document.createElement('input');
    bpxcont.type = 'text';
    bpxcont.name='Melp';
    bpxcont.id='Melp'
    cont.appendChild(bpxcont);
}
 
</script>
</head>
<body onload="add()">
<div id="containert"></div>
</body>
</html>

Werkt bij mij prima in IE7, zonder JS errors.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik denk dat crisp vooral doelt op IE6 met deze fix..

je kunt ook een framework gebruiken voor deze dingen, scheelt een hoop oploswerk... denk daarbij aan iets als MooTools, jQuery, Dojo etc.

[ Voor 57% gewijzigd door Cartman! op 22-07-2008 15:43 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

Cartman! schreef op dinsdag 22 juli 2008 @ 15:43:
Ik denk dat crisp vooral doelt op IE6 met deze fix..
Dat zal best, maar TS had het vooralsnog over IE7. ;)
je kunt ook een framework gebruiken voor deze dingen, scheelt een hoop oploswerk... denk daarbij aan iets als MooTools, jQuery, Dojo etc.
Hier moet ik toch even tegen ageren: is het in deze context niet heul erg overkill om daar een framework voor te pakken?

Ik ben er helemaal niet op tegen om reeds bestaande en bewezen technologie te gebruiken, maar voor dit soort zaken grijp ik in eerste instantie niet naar zoiets.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

Cartman! schreef op dinsdag 22 juli 2008 @ 15:43:
Ik denk dat crisp vooral doelt op IE6 met deze fix..
Geen idee of IE7 die achtelijkheid gefixed heeft, in mijn eigen toolbox doe ik al jaren iets als dit in mijn eigen element-builder:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var element = null;

if ('name' in attributes)
{
    try
    {
        element = document.createElement('<' + nodeName + ' name=' + attributes['name'] + '>');
        delete attributes['name'];
    }
    catch(e) {}
}

if (element || (element = document.createElement(nodeName)))
{
    // etc
}

Intentionally left blank


  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Dank julie wel voor de reacties. Het is me gelukt.
Jullie hadden gelijk. Het zit hem niet in de create element. Dat werkt. Ik krijg welles waar een error op die regel (IE error melding) maar het zit hem hierin.
Dit had ik niet gepost omdat de errorlog aangaf dat het aan decreate element lag
code:
1
2
this.TextBox.innerHTML = Configurations['value'];
this.TextBox.value = Configurations['value'];

FF vult mijn text element pas bij innerHTML. IE geeft daar een foutmelding op. Die pakt alleen de value.
Bedankt voor de moeite en reacties _/-\o_

Jochemmol


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 11-11 10:24

Bosmonster

*zucht*

Je vult een input dmv innerHTML :?

Waarom heb ik het idee dat je de hele tijd maar de helft vertelt..

[ Voor 50% gewijzigd door Bosmonster op 22-07-2008 16:11 ]


  • Cartman!
  • Registratie: April 2000
  • Niet online
TeeDee schreef op dinsdag 22 juli 2008 @ 15:49:
[...]
Hier moet ik toch even tegen ageren: is het in deze context niet heul erg overkill om daar een framework voor te pakken?

Ik ben er helemaal niet op tegen om reeds bestaande en bewezen technologie te gebruiken, maar voor dit soort zaken grijp ik in eerste instantie niet naar zoiets.
Waarom niet? Je kunt bij MooTools slechts een onderdeel gebruiken en packen tot een .js file. Zo kost het aanmaken van dom elementen etc. maar een paar kb aan framework. Dat lijkt me geen overkill maar efficient :)

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Bosmonster schreef op dinsdag 22 juli 2008 @ 16:09:
Je vult een input dmv innerHTML :?

Waarom heb ik het idee dat je de hele tijd maar de helft vertelt..
Dat komt omdat ik alles in 'javascript objecten' heb zitten. Ik roep dus om en om een functie aan. Ik krijg een foutmelding op de aanroep van de eerste functie. Dus post ik die functie.
Ik krijg een foutmelding op de create element. Dan post ik hoe ik een element maak.

Jochemmol


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 11-11 10:24

Bosmonster

*zucht*

Jochemmol schreef op dinsdag 22 juli 2008 @ 16:28:
[...]

Dat komt omdat ik alles in 'javascript objecten' heb zitten. Ik roep dus om en om een functie aan. Ik krijg een foutmelding op de aanroep van de eerste functie. Dus post ik die functie.
Ik krijg een foutmelding op de create element. Dan post ik hoe ik een element maak.
Dat was niet wat ik bedoelde. Ik bedoelde hoe je in hemelsnaam een input met innerHTML kunt vullen.

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ow sorry.
Als ik FF hetvolgende zeg
code:
1
this.TextBox.value = 'Jochemmol';

dan werkt dat niet. De value wordt wel gezet maar de inhoud van de textbox niet. Die blijft empty.
De value is dan wel jochemmol maar ik zie dat niet terug.

Als ik dan
code:
1
2
this.TextBox.innerHTML = ''Jochemmo';
this.TextBox.value = 'Jochemmol';

dan werkt het wel. Nu blijkt IE daar anders mee omgaat. Die zet wel de value in het textfield.
Dus moet ik kijken welke browser de gebruiker heeft om te controleren welke tag ik moet uitvoeren.

Jochemmol


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

Jochemmol schreef op dinsdag 22 juli 2008 @ 16:36:
Ow sorry.
Als ik FF hetvolgende zeg
code:
1
this.TextBox.value = 'Jochemmol';

dan werkt dat niet. De value wordt wel gezet maar de inhoud van de textbox niet. Die blijft empty.
De value is dan wel jochemmol maar ik zie dat niet terug.

Als ik dan
code:
1
2
this.TextBox.innerHTML = ''Jochemmo';
this.TextBox.value = 'Jochemmol';

dan werkt het wel. Nu blijkt IE daar anders mee omgaat. Die zet wel de value in het textfield.
Dus moet ik kijken welke browser de gebruiker heeft om te controleren welke tag ik moet uitvoeren.
Dat is een (ranzige) workaround die het symptoom bestrijd maar niet de oorzaak oplost. Feit is dat een nog niet gerendered input-element feitelijk nog geen value property heeft, enkel een defaultValue property ;)

Intentionally left blank


  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ah :9
Ik zag bij DOM info bij w3school dit als mogelijkheid.
In mijn geval is defaultvalue oke. Want het gaat om de standaard waarde bij het aanmaken.
:D

Jochemmol


  • Juup
  • Registratie: Februari 2000
  • Niet online
Omdat nog niemand het gezegd heeft zeg ik het maar:
Je kunt altijd* beter setAttribute gebruiken:
JavaScript:
1
2
3
4
5
var input = document.createElement("input");
input.setAttribute("type", "text");
input.setAttribute("value", "Jochemmo");
input.setAttribute("id", "name");
someElem.appendChild(input);


* Grote uitzondering is "class". Werkt amper in IE6 dus daarvoor mag je wel .className gebruiken.

[ Voor 4% gewijzigd door Juup op 23-07-2008 01:19 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

Juup schreef op woensdag 23 juli 2008 @ 01:18:
Omdat nog niemand het gezegd heeft zeg ik het maar:
Je kunt altijd* beter setAttribute gebruiken:
Kan je dat ook beargumenteren? Of moet ik je eerst nog op andere inconsistenties wijzen in IE (6, 7 en 8 ) mbt setAttribute() ?

Het lost hier in ieder geval niets op, dus je wint er niets mee.

[ Voor 9% gewijzigd door crisp op 23-07-2008 01:55 ]

Intentionally left blank


  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ik had het eerst ook geprobeert met setAttribute maar dat werkt niet in alle browser. Dat leverde mij veel meer problemen op.

Ik heb daarom besloten gewoon de w3school DOM handleiding te gebruiken en vandaaruit met javascript elementen te gebruiken.

Ik raad iedereen ook af setAttribute te gebruiken.

Jochemmol


  • Kiphaas7
  • Registratie: Februari 2005
  • Laatst online: 17-11 17:56
Cartman! schreef op dinsdag 22 juli 2008 @ 16:17:
[...]

Waarom niet? Je kunt bij MooTools slechts een onderdeel gebruiken en packen tot een .js file. Zo kost het aanmaken van dom elementen etc. maar een paar kb aan framework. Dat lijkt me geen overkill maar efficient :)
Als je met packen, Packer bedoelt: gzippen is efficienter en kleiner. Niks nieuws waarschijnlijk, maar ik plaats dit om misverstanden te voorkomen mbt packen.

[ Voor 9% gewijzigd door Kiphaas7 op 23-07-2008 12:32 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

Cartman! schreef op dinsdag 22 juli 2008 @ 16:17:
[...]

Waarom niet? Je kunt bij MooTools slechts een onderdeel gebruiken en packen tot een .js file. Zo kost het aanmaken van dom elementen etc. maar een paar kb aan framework. Dat lijkt me geen overkill maar efficient :)
Ik heb het ook niet over de bestandsgrootte. Ik heb het, contextueel gezien, over het aanmaken van wat formelements via de DOM. Waarom zou je daar een framework a la mootools voor pakken?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 11-11 10:24

Bosmonster

*zucht*

TeeDee schreef op woensdag 23 juli 2008 @ 13:27:
[...]

Ik heb het ook niet over de bestandsgrootte. Ik heb het, contextueel gezien, over het aanmaken van wat formelements via de DOM. Waarom zou je daar een framework a la mootools voor pakken?
Omdat als het je een paar uur pielen scheelt het gebruik van een library veel efficienter is dan gaan besparen op een paar K aan bestandsgrootte. Met iets als jQuery is het zo gepiept xbrowser.

Als het voor de hobby is maakt het inderdaad niet zoveel uit nee, of als je weet waar je mee bezig bent en het net zo snel zonder kan.

[ Voor 6% gewijzigd door Bosmonster op 23-07-2008 13:46 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:02

TeeDee

CQB 241

Bosmonster schreef op woensdag 23 juli 2008 @ 13:45:
[...]
Omdat als het je een paar uur pielen scheelt het gebruik van een library veel efficienter is dan gaan besparen op een paar K aan bestandsgrootte. Met iets als jQuery is het zo gepiept xbrowser.

Als het voor de hobby is maakt het inderdaad niet zoveel uit nee, of als je weet waar je mee bezig bent en het net zo snel zonder kan.
Zoals ik al zei; Mootools et al kunnen je het leven vele malen makkelijker maken, maar contextueel heb je voor dit stukje echt geen framework nodig.

Wilde eigenlijk al eerder zoiets zeggen maar, vergelijk het met iets als een reactie in WOS:

"Ik heb hier een Windows XP machine waarop ik mijn eigen website wil gaan hosten", waarbij er eerst tig reacties zijn "Gebruik Linux" of "Pak Windows 2003 Enterprise". Dat soort zaken schieten bij mij een beetje in het verkeerde keelgat.

Daarom wilde ik tegen de reactie van Cartman! ageren. Voor zoiets triviaals _kan_ het handig zijn als je weet waarom er iets fout gaat.

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1