Toon posts:

JS : onBlur uitbreiden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het eigenlijke probleem:
In IE7- kunnen geen onBlurs voor niet A elementen gezet worden.

Niet goed werkende oplossing:
code:
1
2
3
4
5
6
7
8
9
10
sfFocus = function() {
    var sfEls = document.getElementsByTagName("INPUT");
    for (var i=0; i<sfEls.length; i++) {

        sfEls[i].onblur=function() {
            this.className=this.className.replace(new RegExp(" sffocus\\b"), "");

        }
    }
}


Dit voegt wel eens waar de mogelijkheid toe om een CSS class toe te passen bij onBlur, maar als voor dit element inline al een andere onBlur definieert is, dan wordt deze inline code niet meer uitgevoerd. Hoe kan ik dus bij onBlur een actie toevoegen zonder de bestaande mogelijkheiden te overschrijven?

alvast bedankt voor een ieder die de moeite neemt!

  • user109731
  • Registratie: Maart 2004
  • Niet online
De oude onblur kun je in een variabele 'vangen' en toevoegen aan de nieuwe onblur:

JavaScript:
1
2
3
4
5
6
7
var oldOnBlur = sfEls[i].onblur;

sfEls[i].onblur = function() {
  if (oldOnBlur != null) 
    oldOnBlur();
  this.className=this.className.replace(new RegExp(" sffocus\\b"), "");
}
Anders even zoeken op addEventHandler / attachEventListener, maar dat lijkt me niet echt nodig in dit geval. :)

Verwijderd

Topicstarter
Nee, dat werkt gek genoeg niet.

  • user109731
  • Registratie: Maart 2004
  • Niet online
Kun je wat meer info geven? :) Want dit hoort gewoon te werken, ik heb het nog even geprobeerd hier.

Wat doet een alert(oldOnBlur); bijvoorbeeld? :) En wat gebeurt als je een alert() in je inline onblur zet? Die word gewoon genegeerd?

[ Voor 22% gewijzigd door user109731 op 27-09-2006 15:30 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 09-12-2025
oldOnBlur wordt iedere keer overschreven bij de volgende iteratie. Je moet dus oude functie dus met closure inbinden, of hem toekennen aan een zelfgedefineerde property van sfEls[i] en dan met this binnen je onblur er weer heen refereren om hem aan te kunnen roepen.

Noushka's Magnificent Dream | Unity


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

idd een closure doen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function addEvent(object, event, handler)
{
  if (object[event])
  {
    var oldhandler = object[event];
    object[event] = function(e)
    {
      e = e || window.event;
      oldhandler.call(object, e);
      handler.call(object, e);
    }
  }
  else
    object[event] = handler;
}


overigens zou ik van die regexp een literal maken, nu moet hij bij elke aanroep weer opnieuw gecompileerd worden.

Intentionally left blank


Verwijderd

Topicstarter
Sorry, vergeten te bedanken, bij deze: bedankt!
Pagina: 1