webForumDet fria alternativet

Kunna lägga in text, smiley där markören befinner sig

JavaScript

31 svar · 2 159 visningar · startad av margar-0 · sida 2 av 2

Frågan, av margar-0

Jag har en gästbok där jag kan sätta in tex fet stil på ord genom dessa {bold}{/bold} Problemet är att när jag markerar texten i textaren som ska ha fet stil så lägger sig dessa tecken sist i meddelandet. Jag vill att texten jag markerat se ut så här: {bold}text som ska vara fet{/bold}. Alltså känna av vad som är markerat i texten. En till sak, om jag vill lägga in en smiley så ska den teckent

Läs frågan i sin helhet →
Medlem sedan sep. 2005849 inlägg
#21

Blir det här nånstans då eller?

<td colspan="2" bgcolor="#FFFFFF"><%=Link(RecSet("msg"))%></td>

Det är väl där som texten man skrivit in visas sen?

Hela koden ser ut som nedan...

Jag får till det så att det lägger sig en liten smiley bredvid submitknappen, och klickar man på smileyn så hamnar det en i formuläret så det funkar ju så långt. Men det blir ingen bild av det när man postat inlägget sen, utan bara en vanlig smiley.

<%Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db

If Request.Querystring("do")= "" Then%>

<table border="0" width="400" align="center" cellpadding="3" cellspacing="10">
  <form method="post" action="<%=INC%>?do=add" name="gastbok"  onSubmit="return Gb()">
    <tr> 
      <td colspan="2" style="border-bottom: 1px solid #006666"><font size="3"><b>
	  <p><div align="center"><div class="titel">Gästbok / Guestbook</div></p></b></font>
	<p>&nbsp;</p>
	  </td>
	  </tr>
    <tr> 
      <td>Ditt namn / Your name:<br><input type="text" name="rubrik" size="25"></td>
	  <td>Plats / Location:<br><input type="text" name="namn" size="25"></td>
     </tr>
    <tr>
      <td>Din e-mail / Your e-mail:<br><input type="text" name="mail" size="25"></td>
      <td>Hemsida / Homepage:<br><input type="text" name="url" size="25"></td>
    </tr>
    <tr> 
      <td valign="top" colspan="2">Meddelande / Message:<br><textarea name="msg" cols="60" rows="8"></textarea></td>
    </tr>
    <tr> 
      <td colspan="2"><input type="submit" value="Skicka / Send">
	  <a href="#" onclick="smilie(' :) '); return false;">:)</a>
	  </td>
    </tr>
  </form>
</table>

<%Set Recset = Server.CreateObject("ADODB.Recordset")

Sidan = Request.QueryString("next")
If Sidan = "" then 
    sida = 1 
Else 
    sida = Sidan 
End If 

With RecSet
    .CursorLocation = 3
    .CacheSize = InlaggPerSida
End With

SQL = "Select * From gastbok Order By datum desc"
RecSet.Open SQL, Conn

If RecSet.EOF Then%>
<br>
<table border="0" width="400" align="center" cellpadding="3" cellspacing="0">
  <tr>
    <td><i>Ingen har skrivit i gästboken.</i></td>
  </tr>
</table>
<%Else%>
<br>
<%With RecSet
     .MoveFirst 
     .PageSize = InlaggPerSida
     .AbsolutePage = sida
End With

Sidor =  RecSet.PageCount
If Sidor > 1 Then%>

<table border="0" width="400" align="center" cellpadding="3" cellspacing="0" style="border: 1px solid #006666">
  <tr>
     <td valign="top" bgcolor="#D0F0D6">
     <%For Sid = 1 To Sidor
         If (Int(Sid)) = (Int(sida)) Then%><b><%=FixDigits(Sid,2)%></b><%Else%> <a href="<%=INC%>?next=<%=Sid%>"><%=FixDigits(Sid,2)%></a> <%End If
     Next%>
     </td>
   </tr>
</table>
<br>
<%End If
X = 0
Do While Not RecSet.EOF And X < RecSet.PageSize%>
<table border="0" width="400" align="center" cellpadding="5" cellspacing="0" style="border: 1px solid #006666">
  <tr>
    <td bgcolor="#D0F0D6" width="400"><b><%=Recset("rubrik")%></b> | <%=Recset("namn")%></td><td align="right" bgcolor="#D0F0D6" width="100"><img src="bilder/klocka.gif" border="0" alt="<%=FormatDateTime(RecSet("datum"),2)%> (<%=FormatDateTime(RecSet("datum"),4)%>)"> <%If RecSet("url") <> "" Then%><a href="<%=RecSet("url")%>" target="_blank"><img src="bilder/homepg.gif" border="0" alt="<%=RecSet("url")%>"></a> <%End If%><%If RecSet("mail") <> "" Then%><a href="mailto:<%=RecSet("mail")%>"><img src="bilder/email.gif" border="0" alt="<%=RecSet("mail")%>"></a><%End If%></td>
  </tr>
  <tr>
    <td colspan="2" bgcolor="#FFFFFF"><%=Link(RecSet("msg"))%></td>
  </tr>
<%If Recset("svar") <> "" Then%>
  <tr> 
    <td colspan="2" bgcolor="#FFFFFF" align="center">
		<table><tr><td width="250" style="border-bottom: 1px solid #990033">&nbsp;</td></tr></table>
	</td>
  </tr> 
  <tr>
    <td colspan="2" bgcolor="#FFFFFF"><b>Svar:</b> <i><%=Replace(RecSet("svar"), vbCrLf, "<br>")%></i></td>
  </tr>
<%End If%>
</table>
<br>
<%X = X+ 1 
Recset.MoveNext
Loop
If Sidor > 1 Then%>

<table border="0" width="400" align="center" cellpadding="3" cellspacing="0" style="border: 1px solid #006666">
  <tr>
     <td valign="top" bgcolor="#D0F0D6">
     <%For Sid = 1 To Sidor
         If (Int(Sid)) = (Int(sida)) Then%><b><%=FixDigits(Sid,2)%></b><%Else%> <a href="<%=INC%>?next=<%=Sid%>"><%=FixDigits(Sid,2)%></a> <%End If
     Next%>
     </td>
   </tr>
</table>

<%End If
Recset.Close
Set Recset = Nothing
End If

ElseIf Request.QueryString("do") = "add" Then

   Namn       = Request.Form("namn")
   rubrik      = Fixa(Request.Form("rubrik"))
   Mail          = Request.Form("mail")
   Msg	        = Fixa(Request.Form("msg"))
   Ip   	  = Request.Servervariables("REMOTE_ADDR")
   Url   	  = Request.Form("url")
   If Url <> "" Then
     If Left(Url,7) = "http://" Then
       Url = Url
     Else
       Url = "http://" & Url
     End If
   End If

   Conn.Execute("Insert Into gastbok(namn, mail, url, msg,ip, rubrik) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"','"& rubrik &"')")
   Response.Redirect INC
End If

Conn.Close
Set Conn=Nothing%>
</table>
</div>
Medlem sedan dec. 20025 483 inlägg
#22

Ja, det är Link(RecSet("msg")) vi måste operera på. Hur ser Link() ut?

:)

Medlem sedan sep. 2005849 inlägg
#23

Aah, då var jag inte helt borta ändå! :D

Hmm... är det det här du menar?

Function Link(strText)
   strText = Server.HTMLEncode(strText)

   Set regExp = New regexp

   regExp.Global = true
   regExp.IgnoreCase = true

   regExp.Pattern = "(http://|www)([\S]*)"
   strText = regExp.Replace(strText,"<a href=""http://$1$2"" target=""_blank"">$1$2</a>")

   regExp.Pattern = "(ftp://)([\S]*)"
   strText = regExp.Replace(strText,"<a href=""$1$2"" target=""_blank"">$1$2</a>")

   regExp.Pattern = "([\S]*@[\S]*[.se|.com|.nu|.net|.org])"
   strText = regExp.Replace(strText,"<a href=""mailto:$1"" target=""_blank"">$1</a>")

   regExp.Pattern = "([.|,|!|?|:|;|)|\|&]]*)</a> "
   strText = regExp.Replace(strText,"</a>$1 ")

   regExp.Pattern = "([.|,|!|?|:|;|)|\|&]]*)"" target=""_blank"">([^<]*)</a>"
   strText = regExp.Replace(strText,""">$2</a>")

   strText = Replace(Trim(strText),vbCrLf, "<br>")
   strText = Replace(Trim(strText),"http://http://", "http://")

Link = strText 				' Skriver ut texten, uppdelad och fin!

End Function
Medlem sedan dec. 20025 483 inlägg
#24

Japp :)

function smiley(s)
    dim re
    set re = new regexp
    
    re.global  = true
    
    re.pattern = " :\) "
    s = re.replace(s, "<img src=""smile.gif"">")
    
    'för att ersätta andra smiley-tecken gör du på liknande sätt:
    're.pattern = " ;\) "
    's = re.replace(s, "<img src=""filnamn.gif"">")
    
    smiley = s
end function

Sedan anropar du smiley() på den text där du vill ersätta förekomster av ' :) ' med smileybilder. I ditt fall kan det se ut så här:

<%=smiley(Link(RecSet("msg")))%>
Medlem sedan sep. 2005849 inlägg
#25

Okej... nu har jag nog rört ihop allting här tror jag.
Ska det där stå typ direkt under Link()? Och den andra strängen, jag har ju en som ser ut såhär: <%=Link(RecSet("msg"))%>. Var sätter jag "smiley-strängen" i förhållande till det?

Åhh, vad rörigt det blir. Men nu när jag har kommit så här långt vill jag ju inte ge upp heller!! :r

Medlem sedan dec. 20025 483 inlägg
#26

Ja, lägg smiley() direkt under Link():

function Link()
...
end function

function smiley()
...
end function

Jag glömde Link() allra sist i mitt förra inlägg :r

<%=smiley(Link(RecSet("msg")))%>

Lycka till! :)

Medlem sedan sep. 2005849 inlägg
#27

Nu tror jag det mesta funkar, det är bara ett problem kvar! Det blir ingen smileybild i inlägget, jag fattar inte riktigt vart jag ska lägga det här.

<%
dim t
t = request.form("t") & ""

if len(t) > 0 then
  dim re
  set re = new regexp

  re.global  = true
  re.pattern = " :\) "

  t = re.replace(t, "<img src=""smile.gif"">")
  'om det är fler smilies som skall göras om
  '
  're.pattern = " ;\) "
  't = re.replace(t, "<img src=""filnamn.gif"">")
  'o s v

  response.write "<div style=""padding:5px; border:1px solid #999; background:#eee"">" & t & "</div>"

  set re = nothing
end if
%>

Du skrev att jag ska lägga det där jag vill att texten från formuläret ska synas. Det måste ju vara i samma tabellrad som det andra då?

<td colspan="2" bgcolor="#FFFFFF"><%=smiley(Link(RecSet("msg")))%></td>

Det är nog bara det som fattas nu... tror jag... :)

Medlem sedan dec. 20025 483 inlägg
#28

I o m funktionen smiley() behöver du inte använda den koddelen.

Angående smileybilden: har du skapat en bild smile.gif? Sedan, funktionen är inställd på att ersätta ' :) ' inklusive de två mellanslagen.

Medlem sedan sep. 2005849 inlägg
#29

Nu har jag fått till det!! Tack snälla för hjälpen!!!!!!! :) :f :f :f :f

(och till wF för smileysarna... ;) )

Medlem sedan dec. 20025 483 inlägg
#30

Weee! :bire

Medlem sedan feb. 20034 441 inlägg
#31

Tjena,
Nu drar jag upp en gammal tråd, men tänkte utnyttja det script som finns här:

<script type="text/javascript">
var cPos,
    fObj,
    ieC = Boolean(document.selection && document.selection.createRange);

function sC() {
    cPos = document.selection.createRange().duplicate();
}

window.onload = function() {
    fObj = document.forms["form-edit-site"].elements["ot_text"];
//	fObj = document.getElementById('ot_text');

    if (ieC) {
	fObj.onclick  = function() { sC(); }
	fObj.onkeyup  = function() { sC(); }
	fObj.onselect = function() { sC(); }
    }
}

function makeBold(foo){
    if (ieC){
		if (typeof cPos != "undefined"){
			cPos.text = "[b]" + cPos.text + "[/b]";
		} else {
			fObj.value += "{bold}{/bold}";
		}
    } else if (typeof window.HTMLTextAreaElement != "undefined"){
		fObj.value = fObj.value.substring(0, fObj.selectionStart)
			+ "{bold}"
			+ fObj.value.substring(fObj.selectionStart, fObj.selectionEnd)
			+ "{/bold}"
			+ fObj.value.substring(fObj.selectionEnd);
    }
}
</script>

Jag har tre knappar ovanför en textarea (som heter ot_text btw.), med vilka man ska kunna infoga "forumkod" runt markerad text, dvs. [ b][ /b] osv.

Mitt formulär laddas in med Ajax, problemet är att jag hela tiden får "makeBold is not defined".

Jag har ändrat "fObj", så att det stämmer in på min textarea.
Måste jag ändra något mer för att få det här att fungera?

Tack!

Medlem sedan okt. 20041 556 inlägg
#32
function makeBold(){
    if (ieC){
		if (typeof cPos != "undefined"){
			cPos.text = "[ b]"+cPos.text+"[/b]";
		} else {
			fObj.value += "[ b] [/b]";
		}
    } else if (typeof window.HTMLTextAreaElement != "undefined"){
		fObj.value = fObj.value.substring(0, fObj.selectionStart)
			+ "[ b]"
			+ fObj.value.substring(fObj.selectionStart, fObj.selectionEnd)
			+ "[/b]"
			+ fObj.value.substring(fObj.selectionEnd);
    }
};
295 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
164 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)