[js] kijken of een object een select is of input

Pagina: 1
Acties:

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
ik moet in een bepaald forumlier bepaalde waardes toevoegen met js, en dit werkt allemaal wel alleen nu is het probleem dat sommige van die velden ook selects zijn, nu wil ik natuurlijk zorgen dat naast de inputs te juiste data laten zien dat ook de selects dat doen, ik wil dus checken of een object een select is en welke waarde dan selected moet worden.

heeft iemand enig idee, want ik kan hierover helaas niks vinden in de search of google.

ik wil dus gewoon dit alleen dan correct :P
code:
1
2
3
4
5
6
7
function changevalue(object,newvalue){
  if(document.getElementById(object)==input){
    document.getElementById(object).value=newvalue;
  }else if (document.getElementById(object)==selected){
    document.getElementById(object).options[newvalue]=selected;
  }
}

openkat.nl al gezien?


Verwijderd

code:
1
2
3
if(object.options && object.options.length >= 0) {
    // object is select
}

Niet helemaal netjes, maar het werkt wel.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

getElementById(id).type == "input" <-- onzin :P

? object gebruiken als je id bedoelt is enigszins verwarrend trouwens.. bovendien is object een gereserveerde naam (met hoofdletter dan)...


Lol.. Blues gaat al de fout in met jouw code dus.. hij denk dat je een object meegeeft, terwijl dit blijbkaar een id is.. :P De methode zou ook moeten werken trouwens.. Ik zat ff verkeerd te lezen.. :)

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
uhm okey, dan maak ik er in de code straks wel id van maar ik kan dus gewoon checken of de length niet nul is?

en hoe selecteer ik die option dan?

(bosmonster zal wel denken, jezus wat veel js vragen van die gozer :P )

openkat.nl al gezien?


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Als het een object is, bijvoorbeeld aangeroepen met 'this'..
code:
1
if (objectVar.tagName == 'select')

anders
code:
1
if (document.getElementById(objectVar.tagName ).tagName == 'select')

/edit:
code:
1
newOption.selected = 'selected';

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Op donderdag 16 mei 2002 11:57 schreef killercow het volgende:
uhm okey, dan maak ik er in de code straks wel id van maar ik kan dus gewoon checken of de length niet nul is?

en hoe selecteer ik die option dan?

(bosmonster zal wel denken, jezus wat veel js vragen van die gozer :P )
Vragen zijn er nooit teveel ;)

Check of het element een options verzameling heeft (dan is het een select) en vervolgens kijkt Blues ook nog of deze een lengte heeft (en dus items heeft).

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
zoiets? ik voel gewoon dat er iets nog niet klopt, (browser voelt dat ook gelukkig :P )
code:
1
2
3
4
5
6
7
function changevalue(object,data){
    if (document.getElementById(object.tagName ).tagName == 'select'){
        document.getElementById(object).options[data].selected='selected';
    } else {
        document.getElementById(object).value=data;
    }
}

openkat.nl al gezien?


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

code:
1
2
3
4
5
6
7
8
9
function changevalue(id,data){
    var obj = document.getElementById(id);

    if (obj.tagName ).tagName == 'select'){
        obj.options[data].selected='selected';
    } else {
        obj.value=data;
    }
}

Je doet nu ook maar 1 maal de getElementById lookup ipv 3x :)

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
okey, muchos thanks

ik moet nog ff sleuteln voordat ik t precies kan testen, maar uhm options[data].selected is een goede manier? want daar wasik niet zo zeker van.

openkat.nl al gezien?


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Op donderdag 16 mei 2002 12:19 schreef killercow het volgende:
okey, muchos thanks

ik moet nog ff sleuteln voordat ik t precies kan testen, maar uhm options[data].selected is een goede manier? want daar wasik niet zo zeker van.
Zo lang data een nummer is :)

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Bosmonster:

[..]

Je doet nu ook maar 1 maal de getElementById lookup ipv 3x :)
Je hebt weer 's helemaal gelijk :)

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
uhm nee options in de inhoud van de option :P
, options[] is dus niet een array met alles opties die er in zitten? of is het een array die alleen de volgorde bijhoud, want ik wil natuurlijk de value laten checken.
code:
1
2
3
4
5
<select name=blaat>
<option name=test>test
<option name=nogeentest>Nog een test
<option name=laatste>Laatste
</select>

Wat staat er dan in options[]?
1,2,3?
of test,nogeentest,laatste
of test,Nog een test, Laatste

openkat.nl al gezien?


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Op donderdag 16 mei 2002 12:25 schreef killercow het volgende:
uhm nee options in de inhoud van de option :P
, options[] is dus niet een array met alles opties die er in zitten? of is het een array die alleen de volgorde bijhoud, want ik wil natuurlijk de value laten checken.
code:
1
2
3
4
5
<select name=blaat>
<option name=test>test
<option name=nogeentest>Nog een test
<option name=laatste>Laatste
</select>

Wat staat er dan in options[]?
1,2,3?
of test,nogeentest,laatste
of test,Nog een test, Laatste
options slaat de options op nummertjes, dus gewoon 0,1,2,3,4 etc.

Wat wil je er precies mee doen?

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
ik zou dus in bovenstaand voorbeeld zeggen;

changevalue('blaat','test');

en dan moet hij de eerste selected maken.

openkat.nl al gezien?


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Op donderdag 16 mei 2002 12:37 schreef killercow het volgende:
ik zou dus in bovenstaand voorbeeld zeggen;

changevalue('blaat','test');

en dan moet hij de eerste selected maken.
Je kunt ze niet direct opvragen met naam, dus daar zul je een lost functietje voor moeten schrijven zoals dit:
code:
1
2
3
4
5
function getOptionByName(sel,name){
    for(var i=0; i<sel.options.length; i++){
        if(sel.options[i].name == name) return sel.options[i];
    }
}

In je eigen code kun je dan zoiets doen:
code:
1
2
3
4
5
6
function changevalue(id,data){
    var obj = document.getElementById(id);
    if (obj.tagName.toLowerCase() == 'select'){
        getOptionByName(obj,data).selected='selected';
    }
}

Verwijderd

Op donderdag 16 mei 2002 11:47 schreef Bosmonster het volgende:
Lol.. Blues gaat al de fout in met jouw code dus.. hij denk dat je een object meegeeft, terwijl dit blijbkaar een id is.. :P
Ik had dit meer als richtlijn bedoeld. Ik heb niet eens naar z'n oorspronkelijke code gekeken :o

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
okey, bedankt

* killercow gaat testen.

openkat.nl al gezien?


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
hmm hij doet het wel, maar zodra ik er een select mee probeer te veranderen geeft hij een error 'undifined is leeg of een object' ,lijkt er dus op dat hij ergens de waarde kwijt raakt en dus niet de juiste optie kan vinden.

openkat.nl al gezien?


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Op donderdag 16 mei 2002 13:46 schreef killercow het volgende:
hmm hij doet het wel, maar zodra ik er een select mee probeer te veranderen geeft hij een error 'undifined is leeg of een object' ,lijkt er dus op dat hij ergens de waarde kwijt raakt en dus niet de juiste optie kan vinden.
Bij mij doet ie het gewoon hoor..

Sorry voor lap code, maar werkend voorbeeld:
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
28
29
30
31
32
<html>
<head>
<script language="JavaScript" type="text/javascript">
function changevalue(id,data){
    var obj = document.getElementById(id);
    if (obj.tagName.toLowerCase() == 'select'){
        getOptionByName(obj,data).selected='selected';
    }
}

function getOptionByName(sel,name){
    for(var i=0; i<sel.options.length; i++){
        if(sel.options[i].name == name) return sel.options[i];
    }
}

</script>
</head>
<body onload="changevalue('selTest','n3')">
<form>
<select name="selTest">
<option name="n1" value="v1">bla1</option>
<option name="n2" value="v2">bla2</option>
<option name="n3" value="v3">bla3</option>
<option name="n4" value="v4">bla4</option>
</select>
</form>

<a href="javascript:changevalue('selTest','n2')">verander</a>

</body>
</html>

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
als ik van options[i].name options[i].value maak dan wil hij hem wel aanpassen en krijg ik niet de error die ik net kreeg maar krijg ik een error dat hij de eigenschap selected niet kan aanpassen, en dat terwijl de select wel naar de juiste optie springt.

edit:

is de waarde van selected niet true of false? beetje dubbelop namenlijk om selected een waarde van 'selected' te geven, ff proberen


waaazig met true als waarde van selected doet hij het ook maar krijg ik nog wel een error.
als ik daarna nog een keer klik en de optie dus al selected is dan krijg ik geen error meer en loopt de rest van het script ook gewoon door.

openkat.nl al gezien?


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Daar had ik neit eens naar gekeken :) Denk inderdaad eerder true/false.

Bij mij doet ie het ook prima als ik er value van maak trouwens. Als ik dan natuurlijk ok wel van die 'n2' en 'n3' even 'v2' en 'v3' maak :)

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
hmm, volgens msdn is het idd true en false, maar gewoon alleen aangeven dat hij er is is ook goed genoeg om het true te maken.
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/option.asp

anyway hij werkt nog niet helemaal perfect , mischien komt het omdat ik de options ook dynamisch toevoeg, hij moet namenlijk een heel stuk code doen, en daarin staat dus ook deze changevalue, hij doet het wel geeft een error en stopt dan met doorlopen. als ik daarna nog een keer de code uitvoer dan loopt hij hem wel ineen keer door en loopt hij ook na de select gewoon door.

heeel erg wazig, hij zegt dat hij de eigenschap selected niet kan instellen, Ongeldige index.
maar hij verandert hem wel..

openkat.nl al gezien?


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
iemand ideen? waarom hij dus de eerste keer crasht op het aanpassen van een selectie en daarna (de tweede keer zonder refresh) geen problemen geeft? want ik snap t niet echt.

openkat.nl al gezien?


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Bij mij doet ie 't gewoon prima..

Misschien dat je selected moet veranderen in true en de select een ID meegeven ?
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
28
29
30
31
<html>
<head>
<script language="JavaScript" type="text/javascript">
function changevalue(id,data){
    var obj = document.getElementById(id);
    if (obj.tagName.toLowerCase() == 'select'){
        getOptionByName(obj,data).selected='true';
    }
}
function getOptionByName(sel,name){
    for(var i=0; i<sel.options.length; i++){
        if(sel.options[i].name == name) return sel.options[i];
    }
}

</script>
</head>
<body onload="changevalue('selTest','n3')">
<form>
<select name="selTest" id="selText>
<option name="n1" value="v1">bla1</option>
<option name="n2" value="v2">bla2</option>
<option name="n3" value="v3">bla3</option>
<option name="n4" value="v4">bla4</option>
</select>
</form>

<a href="javascript:changevalue('selTest','n2')">verander</a>

</body>
</html>

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
kun jij eens hier heen gaan dan?
www.pc-gamers.com/allserve
en dan inloggen met ADMIN en ADMIN en dan in showroom->legopdracht->edit ff kijken?

tipje: in de linker onderhoek zit een frame verborgen dat de data overpompt, deze kun je uitrekken waarna je de source kan bekijken, mischien dat jij de fout ziet?
ik iig niet.

openkat.nl al gezien?

Pagina: 1