Avatar billede hankster Nybegynder
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?
Avatar billede kalp Novice
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:)
Avatar billede hankster Nybegynder
02. september 2007 - 18:20 #2
Kan du hjælpe med noget js kode til den løsning
Avatar billede kalp Novice
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&oslash;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>&nbsp;</p>
</body>
</html>
Avatar billede olebole Juniormester
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>
Avatar billede thesurfer Nybegynder
02. september 2007 - 18:22 #5
kalp> Hmm.. XHTML og text/html?
Avatar billede olebole Juniormester
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  :)
Avatar billede kalp Novice
02. september 2007 - 18:23 #7
thesurfer >> standard dokument, som dreamweaver opretter:) Jeg har kun skrevet det inde i <body>
Avatar billede kalp Novice
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)
Avatar billede hankster Nybegynder
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.
Avatar billede thesurfer Nybegynder
02. september 2007 - 18:26 #10
Gør det i runtime med JavaScript.. :-)
Avatar billede hankster Nybegynder
02. september 2007 - 18:28 #11
Nogen der ligger inde med kode til det?
Avatar billede thesurfer Nybegynder
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>
Avatar billede thesurfer Nybegynder
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..
Avatar billede thesurfer Nybegynder
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>
Avatar billede olebole Juniormester
02. september 2007 - 18:32 #15
el[i].type == "text"  <-- yups

function() { setThisActive(this) };  <-- er måske lidt fiksere
Avatar billede thesurfer Nybegynder
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>
Avatar billede olebole Juniormester
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)
Avatar billede thesurfer Nybegynder
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..
Avatar billede thesurfer Nybegynder
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.. :-)
Avatar billede olebole Juniormester
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)
Avatar billede hankster Nybegynder
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.
Avatar billede thesurfer Nybegynder
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.. :-)
Avatar billede thesurfer Nybegynder
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.
Avatar billede hankster Nybegynder
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
Avatar billede hankster Nybegynder
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
Avatar billede hankster Nybegynder
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
Avatar billede thesurfer Nybegynder
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! :-)
Avatar billede thesurfer Nybegynder
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"
Avatar billede hankster Nybegynder
02. september 2007 - 18:54 #29
Jeg takker mange gange
Avatar billede thesurfer Nybegynder
02. september 2007 - 18:58 #30
olebole> Points?
Avatar billede olebole Juniormester
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]) };
    }
}
Avatar billede olebole Juniormester
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) };
    }
}
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