Javascript Enter opvangen is niet voldoende

Pagina: 1
Acties:

  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Ik heb een webapplicatie van ASP.NET

Op verschillende pagina's kan informatie opgevraagd worden vanuit een tabel
hier kun je een item selecteren, daarna wordt er meer gedetaileerde informatie weergegeven. Je kunt hierna op de knop wijzig drukken om de informatie aan te passen.

Dan worden alle labels textboxen, zodra ik dan op enter druk dan wordt de pagina geannuleerd en dat wil ik niet. Nu heb ik met javascript ervoor gezorgd dat de enter niet meer te gebruiken is, maar nu kan ik ook niet de enter gebruiken in textareas. Nu wil ik niet een aparte toetscombinatie om een enter in een textbox in te voeren. Eigelijk wil ik alleen een eventhandler voor die textarea die daar wel een enter invoert zodra hier de focus op staat, en anders moet hij niks doen met de enter.

Nu komt het volgende probleem, ik wil niet alle pagina's nalopen en zorgen dat bij elke textbox een eventhandler komt. Is het mogelijk om via een loop een eventhandler aan een textarea te binden?

Ik heb het volgende
code:
1
2
3
4
5
6
7
for (i=0;i<document.forms[0].elements.length;i++)
{
    if (document.forms[0].elements[i].type = "textarea")
    {
      document.forms[0].elements[i].onKeyUp = ?
    }
}


Ik heb dus bij het vraagteken geprobeerd om een functie te laten aanspreken
(onKeyUp = "test()", onKeyUp = test(), onKeyUp = "return test()")
die doet alleen maar een alert als test :P

Maar het schijnt niet te werken, heeft iemand anders een goede oplossing?
Of is er eventueel een andere manier om te achterhalen op welk element de focus staat, zonder dat in een variabele bij te houden

[ Voor 3% gewijzigd door dominion99 op 05-02-2003 16:43 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

onKeyUp = test;

Is toch ook voldoende? :?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Klopt maar dat werkt ook niet, functies spreek ik altijd aan met haakjes zo kan ik voor mezelf onderscheid maken tussen functies en variabelen

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ik doelde eigenlijk meer op het koppelen van de functie aan een event... Zal ff wat vb. opzoeken.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

dominion99 schreef op 05 February 2003 @ 17:11:
Klopt maar dat werkt ook niet, functies spreek ik altijd aan met haakjes zo kan ik voor mezelf onderscheid maken tussen functies en variabelen

En dat doe je in dit geval dan verkeerd. In de onevent properties horen pointers naar functies te zitten. En die pointer is dus gewoon de functienaam zonder haakjes. Je kunt het zo zien: bij het loslaten van een toets wordt de functie onkeyup() aangeroepen. Daar komen die haakjes weer terug.

Je kunt als volgt pointers naar functies in een variabele opslaan:

bla = melp;

Hierbij is melp dus gewoon een functie, die je aanroept met melp();
Maar je wilt die functie niet aanroepen, want dan zou je het resultaat opslaan, en dat moet nie in dit geval.

Het kan ook nog zo:

bla = function () { melp(); }

Dit kan voordelen hebben, op deze manier kun je ook argumenten aannemen.

Tenslotte kun je ook een nieuwe instantie van het Function object maken, de constructor retourneert een pointer naar de functie.

  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Het werkt nog steeds niet.
Hoe moet het dan ?

Ik heb nu het volgende

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function setTextAreas()
{
    bla = function () { test(); }

    if (document.getElementById("Ok") != null)
    {
        for (i=0;i<document.forms[0].elements.length;i++)
        {
                if (document.forms[0].elements[i].type == "textarea")
                {
                    window.alert('set keyup' + document.forms[0].elements[i].name)
                    document.forms[0].elements[i].onKeyUp= bla
                }
        }
    }

}

function test()
{
    window.alert('test functie')
}

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Als je die function nu eens uit die andere function haalt :?

Bovendien is de functienaam test gereserveerd en kun je niet gebruiken.

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Bosmonster schreef op 07 February 2003 @ 14:58:Bovendien is de functienaam test gereserveerd en kun je niet gebruiken.
gereserveerd?? oww? in html? in javascript? daar weet ik namelijk niets vanaf...kheb ook nog ff de docs en ECMAscript erop nageslagen maar kan niets vinden wat het bovenstaande bevestigt. :)

"You're only as good, as what you did last week."


  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Ik heb het opgelost

Op het document zelf zit een keylistener, deze wordt alleen gebruikt al er een bepaalde knop zichtbaar is op het scherm (de ok knop)

Zodra je nu in een textarea een enter invoert dan wordt een variabele gezet die dan bij de keycontrole op het document bekeken wordt als die op true staat dan wordt de enter gewoon doorgevoerd naar de betreffende textarea. Zo niet dan wordt het formulier gewoon ingdiend en verwerkt

Dit is de functie die tijdens het initialiseren van de pagina wordt geladen

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function setTextAreas()
{

     if (document.getElementById("Ok") != null)
     {
         for (i=0;i<document.forms[0].elements.length;i++)
         {
               if (document.forms[0].elements[i].type == "textarea")
               {
                   document.forms[0].elements[i].onkeydown = handleEnter 
               }
         }
     }
}


dit is de functie handleEnter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function handleEnter(evt)
{
    evt = (evt) ? evt : window.event
    if (evt.keyCode == 13)
    {
          HasEnter = true
          return true
    }
    else
   {
          return true
   }
}


En dit is de keydown functie op het document

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Zorg ervoor dat er iets gebeurt zodra je op enter drukt
function showKeyDown(evt) 
{   
   var focused_obj;
   evt = (evt) ? evt : window.event
   if (evt.keyCode == 13)
   {
    if (document.getElementById("Ok") != null)
    {
        if (HasEnter)
        {
            HasEnter = false
            return true
        }
        else
        {
            __doPostBack('Ok','')
            return false
        }
    }
    else
    {
        return true
    }
   }
}


Zo werkt het wel

[ Voor 15% gewijzigd door dominion99 op 07-02-2003 18:30 ]

Pagina: 1