[js] bestaande onclick via js uitbreiden

Pagina: 1
Acties:

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
Het doel is een pagina te maken waarin een popup verschijnt zodra men van de pagina afgaat of de browsersluit. Daarvoor gebruik ik onUnload. Dat werkt gewoon (in IE), alleen nu staan er op de pagina een aantal plaatjes waar een onclick aangehangen is. En als daarop geklikt wordt mag de popup niet verschijnen.
HTML:
1
2
3
4
5
6
<body onload="fix_links();" onUnload="popup();">

[img]"test1.gif"[/img]

[img]"test2.gif"[/img]
</body>

Om te voorkomen dat de popup verschijnt moet ik de functie no_exit() uitvoeren en daarna pas het de reeds bestaande javascript uit voeren. Alleen hoe dat ik dat? Ik probeer nu via de functie fix_link (zie onder) alle afbeeldingen van de pagina langs te gaan en deze te veranderen. Dat werkt tot zo ver, ik kan de functie vervangen. Maar dan gaat de orginele functie verloren ipv dat deze er nog achter aankomt.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
exit_site=1
function popup(url,name)
{
    if (exit_site)
        alert('hmm..');
}

function fix_links()
{
    for(var k = 0; k < document.images.length; k++)
    {
        document.images[j].onClick = no_exit;
    }
}
function no_exit(){
  exit_site = false;
}


ik probeerde ook
code:
1
document.images[j].onClick = no_exit+'document.write(document.images[j].onClick;'
wat me wel logisch leek, maar dat werkt niet :'(
Maar hoe dan wel?

Waarom pas ik niet gewoon de html code aan? Dat kan niet want dat zijn include files waar ik geen rechten en geen toestemming voor heb om te veranderen. Alleen de javascripten mag ik veranderen. :X

en ja popup's zijn irritant, unload werkt niet (?) in FF. Maar daar heb ik niets over te beslissen.

[ Voor 6% gewijzigd door Gods Lonely Man op 28-02-2006 13:21 ]

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Verwijderd

je zou het kunnen proberen met een aanpassing van de addLoadEvent-functie.

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Je kan meer dan één handler aan een event toewijzen. Dat doe je echter door via de DOM (level 2) een handler voor een event te registreren. Zie bijvoorbeeld http://www.quirksmode.org/js/events_advanced.html voor details.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 15:23
Werkt dit niet :?
code:
1
2
3
4
5
6
<body onload="fix_links();" onUnload="popup();">

[img]"test1.gif"[/img]

[img]"test2.gif"[/img]
</body>


Meer info is ook op http://www.w3schools.com/ onder javascript te lezen.

let the past be the past.


Verwijderd

je moet overigens ook onbeforeunload hebben denk ik, dat is dus voordat ie afsluit (onunload erna) en die werkt ook in fx dacht ik

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
Ik probeer het nu via de addLoadEvent-functie.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}

in fix_links() staat nu dan het volgende:
code:
1
2
3
4
5
6
7
function fix_links()
{
    for(var k = 0; k < document.images.length; k++)
    {
       addEvent(document.images[j], 'onClick', no_exit);
    }
}

En dat werkt niet, ik krijg alleen geen alert("Handler could not be attached");en ook geen js-error.
Wat doe ik dan fout?

Is het overigens niet zo dat je met addEvent er iets bij zet, of beter gezegd er NA zet? Want dan zou het nog niet helpen..

Is het anders ook mogelijk om de huidige onclick als string op te vangen?

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

JavaScript:
1
addEvent(document.images[j], 'click', no_exit);

overigens heeft deze versie van addEvent issues
Bedenk ook dat de volgorde waarin handlers worden uitgevoerd niet gedefinieerd is bij het gebruik van attachEvent/addEventListener terwijl dat hier wel van belang is.

Dit is een gangbaardere methode:
JavaScript:
1
2
3
4
5
6
7
8
9
if (typeof document.images[j].onclick == 'function')
{
  document.images[j].__onclick = document.images[j].onclick;
  document.images[j].onclick = function()
  {
    no_exit();
    this.__onclick();
  }
}


verder nog 2 dingen:
1) gebruik geen javascript: pseudo-protocol in eventhandlers
2) het is window.location

[ Voor 69% gewijzigd door crisp op 28-02-2006 14:45 ]

Intentionally left blank


  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
crisp schreef op dinsdag 28 februari 2006 @ 14:39:
JavaScript:
1
2
3
4
5
6
7
8
9
if (typeof document.images[j].onclick == 'function')
{
  document.images[j].__onclick = document.images[j].onclick;
  document.images[j].onclick = function()
  {
    no_exit();
    this.__onclick();
  }
}
Sweet, het werkt! :D
Dank u/jullie _/-\o_

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.

Pagina: 1