02. september 2007 - 18:12
Der er
30 kommentarer og 2 løsninger
Indsæt tekst i det felt cursoren er i
Hej. Jeg har en html form med mange felter. Jeg skal ha' lavet en funktionalitet, hvor brugeren kan stille sig i et felterne og klikke på en knap. (én knap for hele formularen) Knappen skal så paste en tekst i det felt man står i. Problemet er at når man klikker på knappen, fordi der er cursoren skiftet til knappen, så hvilket felt stod brugeren i?
Annonceindlæg fra SoftwareOne
02. september 2007 - 18:14
#1
en simpel løsning.. lav et hidden field.. når du klikker på et element opdatere du hidden fields value attribut med id'en på det element der får focus. når du trykker på din knap tjekker du blot i din hidden field hvilken element der skal indsættes i:)
02. september 2007 - 18:20
#2
Kan du hjælpe med noget js kode til den løsning
02. september 2007 - 18:20
#3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="
http://www.w3.org/1999/xhtml"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<p>Navn
<input name="" id="navn" onfocus="java script:document.getElementById('lastclicked').value = this.id;" type="text" />
<br />
Efternavn
<input name="" id="efternavn" onfocus="java script:document.getElementById('lastclicked').value = this.id;" type="text" />
<br />
Alder
<input name="" id="alder" onfocus="java script:document.getElementById('lastclicked').value = this.id;" type="text" />
<br />
Køn
<input name="" id="køn" onfocus="java script:document.getElementById('lastclicked').value = this.id;" type="text" />
<input name="" onclick="java script:document.getElementById( document.getElementById('lastclicked').value ).value = 'Buuuhhh!!';" value="Indsæt" type="button" />
<input type="hidden" id="lastclicked" value="" />
</p>
<p> </p>
</body>
</html>
02. september 2007 - 18:21
#4
<ole> Du kan også bare bruge en variabel i stedet for at introducere et ekstra felt: <script type="text/JavaScript"> var oActive = null; function setThisActive(oInp) { oActive = oInp; } function pasteIntoActive() { if (oActive) oActive.value = "Noget"; else alert("Klik f\u00f8rst i et felt"); } </script> <input onfocus="setThisActive(this)" type="text"> <input onfocus="setThisActive(this)" type="text"> <input onfocus="setThisActive(this)" type="text"> <button onclick="pasteIntoActive()">TEST</button> /mvh </bole>
02. september 2007 - 18:22
#5
kalp> Hmm.. XHTML og text/html?
02. september 2007 - 18:23
#6
- JavaScript pseudo-protokollen må ikke bruges i en event-handler. Den hører til i en href, men giver absolut ingen mening i en event-handler. Altså _aldrig_ 'java script:' i f.eks. onfocus :)
02. september 2007 - 18:23
#7
thesurfer >> standard dokument, som dreamweaver opretter:) Jeg har kun skrevet det inde i <body>
02. september 2007 - 18:24
#8
olebole >> det helt okay med mig hvis man kun skal skrive det i href:) foretrækker jeg da helt klart så;O)
02. september 2007 - 18:25
#9
Det er en løsning, men er der ikke en metode uden at jeg skal til at ligge onFocus kode på alle felter.. Vi snakker MANGE felter.
02. september 2007 - 18:26
#10
Gør det i runtime med JavaScript.. :-)
02. september 2007 - 18:28
#11
Nogen der ligger inde med kode til det?
02. september 2007 - 18:28
#12
Eksempel: <script type="text/JavaScript"> var oActive = null; function setThisActive(oInp) { oActive = oInp; } function pasteIntoActive() { if (oActive) oActive.value = "Noget"; else alert("Klik f\u00f8rst i et felt"); } window.onload = function() { el = document.Formen.elements; for(i = 0, len = el.length, i < len; i++) { if (el[i].type == "textbox") el[i].onfocus = function() { setThisActive(el[i]) }; } } </script> <form name="Formen"> <input onfocus="setThisActive(this)" type="text"> <input onfocus="setThisActive(this)" type="text"> <input onfocus="setThisActive(this)" type="text"> <button onclick="pasteIntoActive()">TEST</button> </form>
02. september 2007 - 18:29
#13
Jeg er lidt i tvivel om følgende: el[i].type == "textbox" -> måske: el[i].type == "text" Jeg mener at function() { setThisActive(el[i]) }; er korrekt.. husker det ikke helt..
02. september 2007 - 18:32
#14
Rettels (fungerende eksempel): <script type="text/JavaScript"> var oActive = null; function setThisActive(oInp) { oActive = oInp; } function pasteIntoActive() { if (oActive) oActive.value = "Noget"; else alert("Klik f\u00f8rst i et felt"); } window.onload = function() { el = document.Formen.elements; for(i = 0, len = el.length; i < len; i++) { if (el[i].type == "textbox") el[i].onfocus = function() { setThisActive(el[i]) }; } } </script> <form name="Formen" onsubmit="return false"> <input onfocus="setThisActive(this)" type="text"> <input onfocus="setThisActive(this)" type="text"> <input onfocus="setThisActive(this)" type="text"> <input type="button" onclick="pasteIntoActive()" value="TEST"> </form>
02. september 2007 - 18:32
#15
el[i].type == "text" <-- yups function() { setThisActive(this) }; <-- er måske lidt fiksere
02. september 2007 - 18:34
#16
olebole> Jeg overvejede også "this", men troede at det var et forkert objekt jeg fik fat i.. Jeg har nu fjernet onsubmit="return false" og rettet ovenstående plus et "," der skulle have været ";": <script type="text/JavaScript"> var oActive = null; function setThisActive(oInp) { oActive = oInp; } function pasteIntoActive() { if (oActive) oActive.value = "Noget"; else alert("Klik f\u00f8rst i et felt"); } window.onload = function() { el = document.Formen.elements; for(i = 0, len = el.length; i < len; i++) { if (el[i].type == "text") el[i].onfocus = function() { setThisActive(this) }; } } </script> <form name="Formen"> <input onfocus="setThisActive(this)" type="text"> <input onfocus="setThisActive(this)" type="text"> <input onfocus="setThisActive(this)" type="text"> <input type="button" onclick="pasteIntoActive()" value="TEST"> </form>
02. september 2007 - 18:35
#17
thesurfer >> test med: <input type="text"> <input type="text"> <input type="text"> - så virker det ikke. Min rettelse ang. type er essentiel ;o)
02. september 2007 - 18:35
#18
Måske skulle jeg også fjerne onfocus="setThisActive(this)" fra input-linierne.. :-) Sådan! :-) <script type="text/JavaScript"> var oActive = null; function setThisActive(oInp) { oActive = oInp; } function pasteIntoActive() { if (oActive) oActive.value = "Noget"; else alert("Klik f\u00f8rst i et felt"); } window.onload = function() { el = document.Formen.elements; for(i = 0, len = el.length; i < len; i++) { if (el[i].type == "text") el[i].onfocus = function() { setThisActive(this) }; } } </script> <form name="Formen"> <input type="text"> <input type="text"> <input type="text"> <input type="button" onclick="pasteIntoActive()" value="TEST"> </form> Jeg ville dog nok give inputs deres id'er..
02. september 2007 - 18:36
#19
olebole> Hehe.. jeg lagde mærke til det, lige efter at jeg postede 02/09-2007 18:34:23.. :-)
02. september 2007 - 18:38
#20
ups ... det virker ikke med 'textbox', men med 'text'. Årsagen til (02/09-2007 18:32:15) virkede var de ikke-slettede event-handlers. Vi falder vist bare over tæerne med alle de indlæg ;D Der er i øåvrigt ingen grund til at bruge ID'er. Tværtimod er det betydeligt mere 'sexy' at referere direkte til elementet ;o)
02. september 2007 - 18:42
#21
Damn.. ´løsningerne virker fint, men jeg fik ikke lige beskrevet det korrekt.. Den skal indsætte der hvor cursoren er i det pågældende felt.
02. september 2007 - 18:43
#22
hankster> Jeg må nok hellere skynde mig og fortælle, at window.onload linien vil overskrive andre window.onload linier.. Der sker ikke noget, hvis du ikke allerede har en window.onload linie.. ellers må du lige sige til.. det kan fixes.. :-)
02. september 2007 - 18:46
#23
Ahh... Hmm.. Jeg mener at jeg engang kæmpede med noget kode, der skulle få det til at virke med Opera, Firefox og Internet Explorer.. Jeg synes ikke at jeg kan finde koden igen.
02. september 2007 - 18:47
#24
Fixede det selv: function pasteIntoActive() { if (oActive && document.selection) { oActive.focus(); sel = document.selection.createRange(); sel.text = "Noget"; } else alert("Klik f\u00f8rst i et felt"); } Sidste ting: Hvad er typen til et textarea.. formen indeholder også disse
02. september 2007 - 18:49
#25
Det skal KUN virke i IE. Det er den eneste browser disse brugere MÅ bruge. Lucky me :) .... Unlucky them
02. september 2007 - 18:50
#26
Surfer det er vist dig der skal have disse point for at følge spørgsmålet til døren.. vil du lave et svar
02. september 2007 - 18:51
#27
Hvis det kun er til IE, hvilket det jo er, så er det nemt nok.. :-) Jeg deler gerne med de andre! :-)
02. september 2007 - 18:53
#28
Hehe.. overså det med textarea.. rettet kode: if (el[i].type == "text" || el[i].type == "textarea") Dvs, der skal bare tilføjes dette til IF-sætningen: || el[i].type == "textarea"
02. september 2007 - 18:54
#29
Jeg takker mange gange
02. september 2007 - 18:58
#30
olebole> Points?
02. september 2007 - 19:06
#31
Denne kode er nu en del mere tidsvarende :) window.onload = function() { aInp = document.getElementsByTagName("input"); for (i=0,len=aInp.length; i<len; i++) { if (el[i].type=="text") el[i].onfocus = function() { setThisActive(el[i]) }; } aInp = document.getElementsByTagName("textarea"); for (i=0,len=aInp.length; i<len; i++) { el[i].onfocus = function() { setThisActive(el[i]) }; } }
02. september 2007 - 19:07
#32
Ups :) window.onload = function() { aInp = document.getElementsByTagName("input"); for (i=0,len=aInp.length; i<len; i++) { if (aInp[i].type=="text") aInp[i].onfocus = function() { setThisActive(this) }; } aInp = document.getElementsByTagName("textarea"); for (i=0,len=aInp.length; i<len; i++) { aInp[i].onfocus = function() { setThisActive(this) }; } }
Vi tilbyder markedets bedste kurser inden for webudvikling