Avatar billede bzz_rar Nybegynder
23. juli 2005 - 18:31 Der er 20 kommentarer og
1 løsning

chat: reload frame via formular

Jeg har nuppet denne dejlig simple chat på Activedeveloper.dk:

<%
Response.Buffer = True

Select Case LCase(Request.QueryString("mode"))
Case "chat" %>
<html>
<head><meta http-equiv="REFRESH" content="10; URL=chat.asp?mode=chat">
<title>Chat</title>
</head><body>
  <%
  strUser = "<b>" & Request.ServerVariables("REMOTE_ADDR") & "</b>: "
  strMessage = Server.HTMLEncode(Trim(Request.Form("message")))

  ' // Her rydes Chat loggen, hvis den overstiger 10000 karakter
  If Len(Application("ChatLog")) > 10000 Then
    Application.Lock
    Application("ChatLog") = ""
    Application.UnLock
  End If

  If Request.Form("Action") = "Send" Then
    If Len(strMessage) > 0 Then
      strChatContent = strUser & strMessage & "<br>" & Application("ChatLog")
      Application.Lock
      Application("ChatLog") = strChatContent
      Application.UnLock
    End If
  End If

  Response.Write Application("ChatLog")

Case "send" %>

<form method="POST" action="chat.asp?mode=chat" target="Top">
<input type="text" name="message" size="30">&nbsp;<input type="submit" name="Action" value="Send">
</form>

<% Case Else %>

<frameset rows="90%,*">
<frame name="Top" src="chat.asp?mode=chat" scrolling="auto" marginwidth="4" marginheight="4" noresize>
<frame name="Bottom" src="chat.asp?mode=send" scrolling="auto" marginwidth="4" marginheight="4">
<noframes>
<body>
<p>Denne side bruger frames, og det understøtter din browser ikke.</p>
</body>
</noframes>
</frameset>
<% End Select %>

</body></html>


Chatten kan testes her: http://activedeveloper.dk/aspdigital/studies/eksempler/chat.asp?

Den har desværre den ene lille fejl, at den ikke reloader den frame hvor formularen ligger. Derfor skal man slette sin forrige tekst hver gang man man skrive en ny. Om det gider man jo ikke!

Der skal nok noget javascript til at løse problemet, og jeg har fået forslået at ændre formfeltet til

<form method="POST" action="chat.asp?mode=chat" target="Top" onSubmit="Bottom.location.href('chat.asp?mode=send')">

hvilket ikke har nogen effect. Da jeg kun har ringe kendskab til javascript, vil jeg høre om der er nogen der kan hjælpe med en løsning?

Pft
Thomas
Avatar billede roenving Novice
23. juli 2005 - 18:48 #1
Hvad med en reset efter et kort stykke tid ?-)

<form method="POST" action="chat.asp?mode=chat" target="Top" onSubmit="setTimeout('this.reset()',500);">
Avatar billede m_els Nybegynder
23. juli 2005 - 18:54 #2
Hvis du indsætter følgende:

<form method="POST" action="" target="Top" onsubmit="getElementById('message').value = ''">
<input type="text" name="message" id="message" size="30">&nbsp;<input type="submit" name="Action" value="Send">
</form>

istedet for

<form method="POST" action="chat.asp?mode=chat" target="Top">
<input type="text" name="message" size="30">&nbsp;<input type="submit" name="Action" value="Send">
</form>


så burde det virke...
Avatar billede m_els Nybegynder
23. juli 2005 - 18:56 #3
ups

det er selvfølgelig

<form method="POST" action="chat.asp?mode=chat" target="Top" onsubmit="getElementById('message').value = ''">
<input type="text" name="message" id="message" size="30">&nbsp;<input type="submit" name="Action" value="Send">
</form>


der skal indsættes

sorry
Avatar billede roenving Novice
23. juli 2005 - 18:57 #4
Det er vel lidt uheldigt at fjerne meddelelsen før den sendes ?-)
Avatar billede roenving Novice
23. juli 2005 - 18:58 #5
Ligesom getElementById _skal_ placeres som en metode på document, i hvert fald, hvis det skal virke i normale browsere (i den sammenhæng tæller M$-produkter jo ikke med, da M$IE jo er en del af styresystemet !-)
Avatar billede m_els Nybegynder
23. juli 2005 - 18:59 #6
hehe...havde jeg ikke lige tænkt over, men så er det jo rart at andre gør det :-)
Avatar billede roenving Novice
23. juli 2005 - 19:01 #7
-- og det skal da også tilføjes, at det bestemt ikke er det heldigste valg, når en frame heddet Top, selvom det store bogstav sikrer, at der ikke forveksles med den javascript window-property, som hedder top (og dækker topmost window i browseren !-)
Avatar billede bzz_rar Nybegynder
23. juli 2005 - 20:32 #8
Tak for svar. Jeg regner ikke med at roenvings forslag virker :-)

m_els forslag har jeg prøvet, men det giver ikke noget reset - det giver jo grå hår på hovedet det her...!
Avatar billede roenving Novice
23. juli 2005 - 20:34 #9
Regner med ?-)

-- har du da prøvet med den forsinkede reset ?o]
Avatar billede bzz_rar Nybegynder
24. juli 2005 - 09:47 #10
Sorry - jeg byttede rundt på navnene i sidste svar - har netop prøvet det forsinkede reset med

<form method="POST" action="chat.asp?mode=chat" target="Top" onSubmit="setTimeout('this.reset()',500);">

men kan ikke få det til at fungere - der sker intet.
Avatar billede roenving Novice
24. juli 2005 - 11:48 #11
Arh, måske skal man bruge en anonym funktion, for hvad er thisom et ½ sekund, når fortolkeren lige pludselig får smidt den kommando i hovedet ?-)

<form method="POST" action="chat.asp?mode=chat" target="Top" onSubmit="setTimeout(function(){this.reset()},500);">

-- og det kan være, at vi skal over i en mellemvariabel, det kan vi jo prøve, hvis dette fejler !-)
Avatar billede bzz_rar Nybegynder
24. juli 2005 - 12:19 #12
<form method="POST" action="chat.asp?mode=chat" target="Top" onSubmit="setTimeout(function(){this.reset()},500);"> havde heller ingen effekt
Avatar billede bzz_rar Nybegynder
24. juli 2005 - 12:25 #13
Har nu løst problemet på en lettere uelegant måde:

If Request.Form("Action") = "Send" Then

Response.Redirect "chat.asp"
end if 

Case "send" %>

<center><form method="POST" action="chat.asp?mode=chat" target="Top">
<input type="text" name="message" size="30">&nbsp;<input type="submit" name="Action" value="Send">
</form></center>

<% Case Else %>
<script language="JavaScript">
<!--
  if (self != top) top.location.href = document.location.href;
// -->
</script>

Men tak for jeres svar. Jeg vil gerne dele pointene ud mellem jer - hvordan er det nu man gør det?
Avatar billede roenving Novice
24. juli 2005 - 12:30 #14
Mellemvariablen:

<form method="POST" action="chat.asp?mode=chat" target="Top" onSubmit="f=this;setTimeout(function(){f.reset()},500);">
Avatar billede roenving Novice
24. juli 2005 - 12:32 #15
-- og hvis du vil uddele point, skal du bede de relevante om at lægge et svar, men jeg synes godt nok, at 200 point er langt i overkanten !-)
Avatar billede bzz_rar Nybegynder
24. juli 2005 - 12:38 #16
Ja, det kan du have ret i. Kan man give mindre?
Avatar billede roenving Novice
24. juli 2005 - 12:40 #17
Hvis også selv lægger et svar, kan du fordele point via avanaceret i det billede, som kommer, når der ligger svar !-)

-- og jeg er lidt spændt på, om du har prøvet den sidste udgave ?-)
Avatar billede bzz_rar Nybegynder
24. juli 2005 - 16:50 #18
ok
Avatar billede bzz_rar Nybegynder
30. december 2005 - 17:25 #19
Gider i at ligge et svar, så jeg kan komma af med de lovede point? :-D
Avatar billede roenving Novice
31. december 2005 - 14:32 #20
Oki '-)
Avatar billede roenving Novice
31. december 2005 - 15:09 #21
-- og tak for point ;~}
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