Avatar billede steen_hansen Forsker
03. juli 2016 - 23:42 Der er 9 kommentarer og
1 løsning

<button> i løkke åbner ikke korrekt bruger i nyt vindue

Jeg er ved at lave en side, hvor brugerne skal kunne ændre en status fra 1 til 11, afhængig af situationen. Alle brugere har hver deres button med deres initialer på..

Man trykker på sin <button>. Det er så meningen, at et nyt vindue skal åbne med en formular, hvor man vælger en status, 1 til 11.

Jeg fandt noget HTML på http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open5 som kan åbne et nyt vindue. Det fungerer fint, når jeg kører scriptet gennem en løkke. Så tages alle brugerne fra den respektive status og skrives ud i buttons på en række inde i en <div>. Så jeg vil mene, at det bliver kørt korrekt gennem løkken, eftersom hver button har hver brugers initialer på. Eksempel på 3 brugere med status = 1:

<button>AAAAA</button>  <button>BBBBB</button>  <button>CCCCC</button>

Det er så meningen, at:
- Man trykker på sin knap
- Et nyt vindue åbner
- Man ændrer sin status oog submitter
- Den nye værdi status bliver gemt i databasen

Så vi AAAAA trykker på sin knap, skulle det nye vinduer gerne have URL'en
/setstatus.asp?user=aaaaa
BBBBB: /setstatus?user=bbbbb
CCCCC: /setstatus.asp?user=ccccc

Men .. uanset hvilken knap man trykker på og det nye vindue åbner, hedder URL'en

/setstatus.asp?user=ccccc

Det gælder for bruger AAAAA, BBBBB og CCCCC

Hvorfor?

HTML/JavaScript/ASP herunder:

<%

    Dim RS1200
    Set RS1200 = Conn.Execute("SELECT initials, status FROM users WHERE status = 1 ORDER BY initials ASC")

    If Not RS1200.EOF Then

%>

        <div class="LastRecord"></div>
        <div class="subheadline">BRUGERE</div>
        <div class="divUser">

<%

        Do Until RS1200.EOF

%>

            <button onclick="open1200()"><%=UCase(RS1200("initials"))%></button>&nbsp;&nbsp;
            <script>
            function open1200() {
            window.open("/setstatus.asp?user=<%=LCase(RS1200("initials"))%>", "_blank", "toolbar=no,scrollbars=no,resizable=no,top=300,left=300,width=400,height=400");
            }
            </script>

<%

        RS1200.MoveNext
        Loop

    End If

%>

        </div>

<%

    RS1200.Close
    Set RS1200 = Nothing

%>
Avatar billede softspot Forsker
04. juli 2016 - 00:11 #1
Det er fordi du genererer en javascript-funktion med samme navn til hver knap, hvilket vil resultere i, at den sidste funktion bliver den gældende, uanset hvilken knap den kaldes fra.

Du bør rykke javascript-funktionen ud af løkken og anvende en parameter i kaldet til open1200.

Din iteration igennem recordsettet skal således i stedet generere en værdi ind i onclick-handleren.

Do Until RS1200.EOF
%>
    <button onclick="open1200('RS1200("initials")')">
        <%=UCase(RS1200("initials"))%></button>&nbsp;&nbsp;
<%
    RS1200.MoveNext
Loop
%>
<script>
    function open1200(initials) {
        window.open("/setstatus.asp?user=" + initials, "_blank", "toolbar=no,scrollbars=no,resizable=no,top=300,left=300,width=400,height=400");
    }
</script>


Alternativt skal du generere en ny funktion (med et nyt navn) for hver iteration som kan kaldes, men det er jo lidt fjollet, når nu du kan bruge parametre og funktionen skal gøre det samme for alle knapper.
Avatar billede steen_hansen Forsker
04. juli 2016 - 11:05 #2
Hej softspot, det er dælme længe siden :)

Jeg kan se hvad du mener, men kan ikke få det til at spille i praksis. Kan du se hvad der går galt? Det ser således ud nu:

<%

    Dim RS1200
    Set RS1200 = Conn.Execute("SELECT initials, status FROM users WHERE status = 1 ORDER BY initials ASC")

    If Not RS1200.EOF Then

%>

        <div class="LastRecord"></div>
        <div class="subheadline">BRUGERE</div>
        <div class="divUser">

<%

        Do Until RS1200.EOF

%>

            <button onclick="open1200('RS1200("initials")')"><%=UCase(RS1200("initials"))%></button>&nbsp;&nbsp;

<%

        RS1200.MoveNext
        Loop

%>

            <script type="text/javascript">
            function open1200(initials) {
            window.open("/setstatus.asp?user=" + initials, "_blank", "toolbar=no,scrollbars=no,resizable=no,top=300,left=300,width=400,height=400");
            }
            </script>

<%

    End If

%>

        </div>

<%

    RS1200.Close
    Set RS1200 = Nothing

%>
Avatar billede softspot Forsker
04. juli 2016 - 12:47 #3
Bort set fra, at du bør rykke din sidste lukkende div indenfor if-strukturen (da den åbnes inde i if-strukturen), så er det jo et noget åbent spørgsmål.

Du er nok nød til at uddybe, hvad det er der ikke helt spiller.

Der kan være mange ting galt, så alt efter hvad resultatet af din kode er (fejl, adfærd), kan der være forskellige løsningsmuligheder.
Avatar billede steen_hansen Forsker
04. juli 2016 - 13:09 #4
Sorry, det havde jeg sådan set også gjort:


            <script type="text/javascript">
            function open1200(initials) {
            window.open("/setstatus.asp?user=" + initials, "_blank", "toolbar=no,scrollbars=no,resizable=no,top=300,left=300,width=400,height=400");
            }
            </script>
        </div>

<%

    End If

    RS1200.Close
    Set RS1200 = Nothing

%>


Jeg kan trykke på button, men der sker intet. Det nye vindue åbner ikke.
Avatar billede softspot Forsker
04. juli 2016 - 13:52 #5
Det kan være du lige skal sætte en type på button (så den ikke laver en submit, hvis ellers dette er hvad der sker).

<button type="button" onclick="....">osv...
Avatar billede softspot Forsker
04. juli 2016 - 13:54 #6
Ehm... så skal der nok også lige rettes lidt i den kode der indsætter parameteren i clickeventet. Det skal jo være serverside kode, hvilket det ikke er nu:

<button type="button" onclick="open1200('<%=UCase(RS1200("initials"))%>')"><%=UCase(RS1200("initials"))%></button>&
Avatar billede steen_hansen Forsker
04. juli 2016 - 14:10 #7
Så lykkedes det! :)

Jeg skal kave lavet setstatus.asp. Vi behøver ikke at tage den nu, men man må kunne vælge sin status, trykke på Gem/Opdater, og blive redirectet til "Din status er nu opdateret" <button>Luk vindue</button>. Jeg håber du kan være behjælpelig, hvis jeg støder på problemer.

Jo, en sidste tinge: Kan jeg fjerne adresselinien fra setstatus.asp? Ligesom man kan fjerne scrollbar mv....
Avatar billede softspot Forsker
04. juli 2016 - 15:59 #8
Jeg mener kun du kan få lov til at fjerne adresselinjen, hvis brugerens browser er sat op til at tillade det, men tjek lige dokumentationen for window.open. Det må stå her, hvilke muligheder der er.
Avatar billede steen_hansen Forsker
04. juli 2016 - 17:41 #9
Jeg tjekker :)
Avatar billede steen_hansen Forsker
13. juli 2016 - 15:19 #10
Jeg tror også kun man kan fjerne adresselinien i browserens opsætning. Det er også fint nok, at den er fremme.
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

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