Avatar billede fangel Nybegynder
21. marts 2004 - 09:15 Der er 11 kommentarer og
1 løsning

hjælp til en onChange på en <select>

Hej...

Jeg har en select der ser sådan her ud:

    <select onChange="if(window.confirm('Are you sure you want to change the status of the article')) window.location='http://host/admin/index.php?page=articles&setID=1&status=' + this.selected.value; return true;" class="tekst">
    <option value="-666">Delete</option>
    <option value="-1">Ban</option>
    <option value="0">Pendig</option>
    <option value="1" selected>Active</option>
    </select>

MEN det virker ikke helt, det den skal gøre er at:

1) lave en window.confirm('Are you sure you wan't to change the status of the article');
2) hvis denne returnere true så gå til
'http://host/admin/index.php?page=articles&setID=1&status=' + den valgtes option value

Hvordan skal onChange så se ud?

Morten
Avatar billede o-zone Nybegynder
21. marts 2004 - 10:39 #1
onChange="if(window.confirm('Are you sure you want to change the status of the article')) window.location='http://host/admin/index.php?page=articles&setID=1&status=' + this.options[this.selectedIndex].value; return true;"

(-:H@zze
Avatar billede fangel Nybegynder
21. marts 2004 - 10:51 #2
Tak - det virker...

Morten
Avatar billede roenving Novice
21. marts 2004 - 10:56 #3
Hvad skal den der return true ?-)

Som du har den vil den altid blive udført, men hvad skal den udføre ?o]

-- og så havde du den med kun ganske lidt fejl, hvor hasses jo er bagudkompatibel og også virker i NS4, hvis du i øvrigt supporterer den ...

onChange="if(window.confirm('Are you sure you want to change the status of the article')) window.location='http://host/admin/index.php?page=articles&setID=1&status=' + this.value;"
Avatar billede o-zone Nybegynder
21. marts 2004 - 11:14 #4
Jeg er ikke sikker på at jeg helt forstår roenvings indlæg :-? ... men tilgengæld opdagede jeg lige at selecten vil (for)blive ændret selvom man trykker annuller i confirm'en. Det kan f.eks. ændres således:

<body onload="prevSelect = document.forms['myForm'].elements['mySelect'].selectedIndex; return true;">
...
<select name="mySelect" onChange="if(window.confirm('Are you sure you want to change the status of the article')) window.location='http://host/admin/index.php?page=articles&setID=1&status=' + this.options[this.selectedIndex].value'; else document.forms['myForm'].elements['mySelect'].selectedIndex=prevSelect; return true;" class="tekst">
...
Avatar billede o-zone Nybegynder
21. marts 2004 - 11:15 #5
"return true" er med fordi eventhandlere skal returnere en boolean (der betyder noget forskelligt alt efter hvad det er for en eventhandler)
Avatar billede o-zone Nybegynder
21. marts 2004 - 11:19 #6
Havde det i øvrigt ikke lige været en location.href du havde ændret (hvilket jo medfører at du ryger ud af siden), så kunne du pricipielt have en select med fortrydelsesret med:
...
<select name="mySelect" onChange="if(window.confirm('Are you sure you want to change the status of the article')) { prevSelect=document.forms['myForm'].elements['mySelect'].selectedIndex; alert('http://host/admin/index.php?page=articles&setID=1&status=' + this.options[this.selectedIndex].value');} else document.forms['myForm'].elements['mySelect'].selectedIndex=prevSelect; return true;" class="tekst">
...
(Jeg har ændret locetion.href til alert, for at du kan se princippet :) )
Avatar billede roenving Novice
21. marts 2004 - 11:20 #7
Til og med NS4 og IE3 var det påkrævet at bruge this.options[this.selectedIndex].value, fra NS6 og IE4 er this.value nok ...
Avatar billede fangel Nybegynder
21. marts 2004 - 11:23 #8
roenving -> tjaa, så længe det ikke skader, så er det ligemeget med det lidt ekstra kode ;)

o-zone -> er bange for jeg ikke liiiige kan benytte din kode da der kommer X antal af disse selects... (med forskellige setID, der bliver skrevet af PHP)
og i Firefox .8 sker der intet når jeg trykker på Cancel... så i hvert fald i FF virker det som det er...

Morten
Avatar billede o-zone Nybegynder
21. marts 2004 - 11:24 #9
der havde lige sneget sig et lille ' ind! der skal selvfølgelig stå:
<select name="mySelect" onChange="if(window.confirm('Are you sure you want to change the status of the article')) { prevSelect=document.forms['myForm'].elements['mySelect'].selectedIndex; alert('http://host/admin/index.php?page=articles&setID=1&status=' + this.options[this.selectedIndex].value);} else document.forms['myForm'].elements['mySelect'].selectedIndex=prevSelect; return true;" class="tekst">
Avatar billede o-zone Nybegynder
21. marts 2004 - 12:57 #10
Der er ikke noget teknisk i vejen for at du opretholder et array med værdierne af alle dine selects. Men det er selvfølgelig helt op til dig! :)

Da alle andre valg end udgangspunktet på en select vil forårsage en ny href (og du derfor kun behøver at spekulere over hvad der skal ske ved en annulering), vil du selvfølgelig også kunne hardcode selectenes default værdi ind i dem
som f.eks.:
...
<select name="mySelect" onChange="if(window.confirm('Are you sure you want to change the status of the article')) location.href='http://host/admin/index.php?page=articles&setID=1&status=' + this.options[this.selectedIndex].value; else this.selectedIndex=3; return true;" class="tekst">
Avatar billede fangel Nybegynder
21. marts 2004 - 13:06 #11
o-zone -> ahhhh, havde ikke fanget hvad du mente med at den forblev ændret ved anuller... ja, jeg kan sagtens hardcode dens selected index... tror jeg at jeg gør...

Morten
Avatar billede o-zone Nybegynder
21. marts 2004 - 22:57 #12
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger Business Relationship Manager

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst

Capgemini Danmark A/S

AI Data Architect