11. juli 2004 - 23:12Der er
44 kommentarer og 1 løsning
Indsætte smiley rigtige sted fra nyt vindue?
Jeg har mit mailsystem med smileys i, jeg vil gerne have man kan vælge flere smileys via et vindue, det virker også fint, men ligesom sidst med normal, så sættes alle dem man trykker på ind efter al teksten i boksen, selvom curseren står inde midt i teksten!
her er koden i vinduet i går ind på ny besked når i er logget ind, og så under besked, står der chat, bare lige skrevet forkert men i skal trykke der, spørg hvis i ikke forstår mit spg
<script type="text/javascript"> <!-- function nysmil(text) { text = ' ' + text + ' '; if (opener.document.hh.besked.createTextRange && opener.document.hh.besked.caretPos) { var caretPos = opener.document.hh.besked.caretPos; caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text; opener.document.hh.besked.focus(); } else { opener.document.hh.besked.value += text; opener.document.hh.besked.focus(); } } //--> </script>
jo, der er en mulighed for at det både virker i IE og Mozilla:
Dette skal sættes ind i popup-vinduet: <script type="text/javascript"> <!-- function nysmil(text) { frmElm = opener.document.hh.besked; if (typeof opener.cursorpos == "number") {
frmElm.value = frmElm.value.substring(0,frmElm.selectionStart)+text+frmElm.value.substring(frmElm.selectionEnd); } // For mozilla else if (opener.document.selection) {r = opener.document.selection.createRange(); if (r.parentElement().type == "textarea") {r.text = text;} else {frmElm.value += text;} } // For IE else frmElm.value += text; }
//--> </script>
og dette skal ændres i din lavbesked.php: <textarea name="besked" cols="40" rows="10" onfocus="fokus = true;cursorpos = this.selectionStart" onblur="fokus = false;"></textarea>
og forresten så kan det være du lige skal rette den her - fandt jeg lige ud af i sidste spørgsmål at IE5 ikke kan klare den syntax: function insertTag(frmElm,startTag,endTag) { if (typeof frmElm.selectionStart == "number" && typeof frmElm.selectionEnd == "number") { selectedtext = startTag+frmElm.value.substring(frmElm.selectionStart,frmElm.selectionEnd)+endTag; frmElm.value = frmElm.value.substring(0,frmElm.selectionStart)+selectedtext+frmElm.value.substr(frmElm.selectionEnd); } else if (document.selection) {frmElm.focus();r = document.selection.createRange();r.text = startTag+r.text+endTag;} else frmElm.value += startTag+endTag; }
du kan ikke minimere det - så jeg vil nok lukke det i stedet. Altså: function nysmil(text) { frmElm = opener.document.hh.besked; if (typeof opener.cursorpos == "number") {
frmElm.value = frmElm.value.substring(0,frmElm.selectionStart)+text+frmElm.value.substring(frmElm.selectionEnd); } // For mozilla else if (opener.document.selection) {r = opener.document.selection.createRange(); if (r.parentElement().type == "textarea") {r.text = text;} else {frmElm.value += text;} } // For IE else frmElm.value += text; self.close(), }
og så en ting mere, når jeg skal bruge de smileys, så sætter jeg curseren der hvor den smiley skal være, vælger linket flere smileys, og vælger en af dem, så sker der det, at den som før bliver indsat bag al teksten, jeg skal mens vinduet med smileys er åbent, markere med curseren, og derefter indsætte, så kommer den rigtigt ind!
Prøv selv ved hjælp af linket i toppen bruger og kode er test
jeg kan godt se problemmet i IE hvor det vist ikke virker særlig godt og skal også se om der ikke kan gøres noget ved det - men desværre kan jeg ikke lige finde en ordentlig mulighed for at aflæse hvor i textareaet cursoren sidst er sat.
Når du taler om brugervenlighed, så tænker du vel på hvad der sker når man vælger en ny smiley fra popupen. Her vil jeg mene at hvis man lukker vinduet ville det være bedst eller alternativt sætte fokusset i modervinduet. Selv hælder jeg nok mest til den første mulighed, da brugeren nok ikke har lyst til, at have det popup-vindue hængende hele tiden, hvis personen allerede har valgt en smiley.
og så angående om man skal lave en popup når man vil skrive en ny besked:
Det synes jeg egentlig ikke er nødvendigt. For mange popups kan også ødelægge det hele, og desuden kan brugeren også bare vælge at åbne et link i et nyt vindue hvis han har lyst.
angående det med hvor den sidst er sat, kan man ikke med noget javascript gøre sådan, at når den skal åbne siden med smileys, så først lægger den evt. en cookie med positionen, og derefter åbner vinduet, så kan det aflæses af vinduet
HVad så når man vælger en ny position, så skal den jo fjerne cookie, det er ikke noget problem som den lukker, men hvis den alligevel ikke skal det? kan man bare gøre det via en variabel? eller sådan noget?
altså indtil videre laver den faktisk en løsning hvor den bruger en variabel - men det er kun til Mozilla. Som jeg nævnte i 12/07-2004 01:12:43 er det ikke lige så let direkte at aflæse efter hvilket bogstav cursoren er sat i IE. Det er lige det som skaber problemmet lige nu.
jeg kigger lidt på det nu, men du kan bare smutte i seng hvis det er. Jeg kan ikke umiddelbart sige hvor længe jeg gider bøvle med det her i nat. Så kan vi tage det op i morgen (har nok tid en gang i morgen aften igen)
en god ide' - og det viste sig også de havde en ret fin teknik til at ordne det med. Måske jeg skulle bruge en lignende til mit normale insertText script ;-)
I hvert fald kan du prøve at lave disse ændringer: lavBesked.php: Tilføj: var curRange; function storeTextRange() { if (document.selection) { curRange = document.selection.createRange().duplicate(); } }
Jo det virker stort set, der erlige en ting, om du kunne ordne det?
prøv at logge ind og gå indpå ny besked.
Når du direkte indsætter smiley, så bliver curseren sat synligt når man sætter en ind, hvis du bruger vinduet så forsvinder curseren, og når du lukker vinduet og så indsætter en smiley direkte igen, bliver den indsat bagerst, er der en måde og ændre det på?
Jeg har en ting til hvis det er noget du nemt kan!
JEg har lavet sådan at når man sender mailen så poster den til næste side, der så inden den sender, tjekker om brugeren findes, hvis ikke, melder den en alert, og går en history tilbage. Men så er felterne jo tomme, hvordan fikser jeg den?
hvis browseren ikke selv har gemt de forskellige felter, så er der jo ikke meget at gøre. Ellers skulle du bruge noget PHP/ASP og så i stedet for at gå tilbage, så gå frem til den samme side, og send de forskellige informationer med. På den måde kan du så med PHP/ASP skrive de forskellige værdier ind i felterne igen.
undskyld jeg ikke har svaret tilbage - min mail er nede, så jeg kan ikke rigtig holde styr på om der kommer nye indlæg. Men jeg synes det vil være passende hvis du lavede et nyt spørgsmål (som du så har gjort). Kan godt se problemmet, men der skal altså andre kræfter end Javascript til at løse sådan noget... håber du får hjælp et andet sted.
jo mange tak, jeg ved godt du sagde først i aften, så det er da okay! Skal bare snart på ferie så havde lidt travlt!
Jeg brugte sessions!
Du kan se spørgsmålet poste fra side1 til side2 til side3, tror jeg den hedder!
Mange tak for hjælpen :)
Det er løst :)
Synes godt om
Ny brugerNybegynder
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.