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"> <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