Script - Hide - Show - funktioniert nicht

Das beigefügte script funktioniert einwandfrei, wenn es als autarkes html file aufgerufen wird.
Integriere ich das script jedoch in den shop wird die function nur einmal aufgerufen, dann nicht mehr.

kann mir einer von euch sagen an was das liegt?
danke schon mal im voraus.

racoon

Für alle, die kein zip runterladen wollen - hier der code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
<!--
#mydiv{
    background-color: #999999;
    height: 100px;
    width: 100px;
                display:none;
}
-->
</style>
<script type="text/javascript">
document.onclick=check;
function check(e){
var target = (e && e.target) || (event && event.srcElement);
var obj = document.getElementById('mydiv');
var obj2 = document.getElementById('sho');
var parent = checkParent(target);
if(parent){obj.style.display='none'}
if(target==obj2){obj.style.display='block'}
}
function checkParent(t){
while(t.parentNode){
if(t==document.getElementById('mydiv')){
return false
}
t=t.parentNode
}
return true
}
</script>


</head>
<body>
<a href="#" id="sho">show the div</a>
<div id="mydiv">
Hallo
</div>


</body>
</html> 

[QUOTE=racoon;13675]Das beigefügte script funktioniert einwandfrei, wenn es als autarkes html file aufgerufen wird.
Integriere ich das script jedoch in den shop wird die function nur einmal aufgerufen, dann nicht mehr.[/QUOTE]

Wir das Script im Shop denn (richtig) geladen?

hallo avenger,
das script wird einmal beim laden aufgerufen. habs mit “alert” getestet.
anschließend wird bei einem klick kein functionsaufruf mehr gestartet.

warum, kann ich mir nicht erklären. gruß

[QUOTE=racoon;13692]hallo avenger,
das script wird einmal beim laden aufgerufen. habs mit “alert” getestet.
anschließend wird bei einem klick kein functionsaufruf mehr gestartet.

warum, kann ich mir nicht erklären. gruß[/QUOTE]
Was sein könnte ist, dass “document.onclick” von einem Shop-Skript redefiniert wird, das “document-onclick”-Event also einen anderen Handler bekommen hat…

@Marco: das kannst Du un sicher sagen, oder?


// Category navigation init
.......
if(nr>0){ document.onclick = oxid.nav.close; }

oxid.js, Zeile 77

Da ist der Übeltäter…

Was schlägst Du nun vor?
Kann man irgendwie kombinieren?

Versuch’s mal so:

Ersetze

if(nr>0){ document.onclick = oxid.nav.close; }

mit

 if(nr>0)
{
    document.onclick = oxid.nav.close;check; 
}
else
{
    document.onclick = check; 
}

Merci!!!
Werde es heute abend versuchen.

Hey Avenger, das funktioniert!

Is ja geil. Du bist echt klasse!!
Hast noch keinen Donate Button (Bierbutton) :wink:

den schenk ich dir

Oh nein. Das verträgt sich nun nicht mit dem services “drop down”.
dieser drop down funktioniert nun nicht mehr:

hab eben gecheckt: es liegt an der änderung im oxid.js.

schade. muss mal grübeln, an was es liegt.

[QUOTE=racoon;13788]Oh nein. Das verträgt sich nun nicht mit dem services “drop down”.
dieser drop down funktioniert nun nicht mehr:

hab eben gecheckt: es liegt an der änderung im oxid.js.

schade. muss mal grübeln, an was es liegt.[/QUOTE]
Dann müssen wir da wohl mal die härteren Sachen auspacken…

Versuch’s mal so:

Ersetze

if(nr>0){ document.onclick = oxid.nav.close; }

mit

 if(nr>0)
{
  if (typeof document.onclick != "function") 
  {
    document.onclick = oxid.nav.close;
  } 
  else 
  {
      var oldonclick = document.onclick;
    document.onclick = function() 
    {
      if (oldonclick) 
      {
        oldonclick();
      }
      oxid.nav.close;
    }
  }
}

Damit gewöhnt man OXID ab, den “onclick”-Handler einfach zu “kapern”, sondern der OXID “onclick”-Handler wird ggfs. zu den schon bestehenden “onclick”-Handlern hinzugefügt.

Guten Morgen Avenger, bist Du ein Frühaufsteher oder warst Du noch gar nicht im Bett :smiley:

Werds heut Abend wieder testen. Dank Dir mal wieder ganz arg!
Hab schon ein schlechtes Gewissen :wink:

Wünsch Dir nen schönen Tag, bis später.

[QUOTE=racoon;13809]Guten Morgen Avenger, bist Du ein Frühaufsteher oder warst Du noch gar nicht im Bett :D[/QUOTE]
Frühaufsteher…

[QUOTE=racoon;13809] Hab schon ein schlechtes Gewissen ;)[/QUOTE]
Brauchst Du nicht, ist ja mein eigenes Verschulden, wenn ich mich damit befasse…

Aber das hilft mir ja auch alles, die Innereien von OXID besser zu verstehen.

schade es funktioniert nicht.

ich lass halt die funktion mit “sonst wo hin klicken, dann gehts auch zu” weg.
wäre ein schönes zusatzfeature gewesen.
aber ich möchte nicht, dass du so viel zeit investierst.
brauch dich sicher später wieder mal :wink:

danke für deine mühe!!!

PS: Aber echt schade. Sieht nämlich echt geschmeidig aus, wenn das so wieder zu geht :frowning:

[QUOTE=racoon;13865]schade es funktioniert nicht.

ich lass halt die funktion mit “sonst wo hin klicken, dann gehts auch zu” weg.
wäre ein schönes zusatzfeature gewesen.
aber ich möchte nicht, dass du so viel zeit investierst.
brauch dich sicher später wieder mal :wink:

danke für deine mühe!!!

PS: Aber echt schade. Sieht nämlich echt geschmeidig aus, wenn das so wieder zu geht :([/QUOTE]
So schnell wird nicht aufgegeben!!!

Oft sieht man wirklich den Wald vor lauter Bäumen nicht…

Das sollte funktionieren, wenn Du Deinen “onclick”-Handler nicht für das “document”, sondern für den “body” definierst, dann kommst Du nicht mit der oxid.js ins Gehege…

Also: “[B]body[/B].onclick=check;” statt “[B]document[/B].onclick=check;”

Dann kann man die oxid.js im Original belassen.

Wenn auch das nicht funktioniert, gebe auch ich auf. :mad:

Also nochmal. Ich nehm den alten Stand (vor deinen ganzen Änderungen) der oxid.js.

Mal gucken, ob ich die alle finde (meine onlclick).
Oder meinst du konkret mein script in meinem ersten post?

Geb dir wieder Bescheid.

also hier der code um den es geht. Zur Erklärung.
1.) Es gibt einen Anmelde button, der je nachdem ob JavaScript aktiviert ist mit einer Aufklappbox ausgestattet sein.
2.) Wenn man eingeloggt ist, wird der “Anmelden” button mit “Mein Konto” ersetzt.

Die ganzen Scripte sind einzeln mit den tags umschlossen.

Was soll nun von document zu body getauscht werden?
Wenn ich zeile 2 [B]document.onclick=check[/B] oder auch den aufruf in body tausche, dann geht nix mehr.

<script type="text/javascript">
document.onclick=check;
function check(e){
var target = (e && e.target) || (event && event.srcElement);
var obj = document.getElementById('anmelden');
var obj2 = document.getElementById('sho');
var parent = checkParent(target);
if(parent){obj.style.display='none'}
if(target==obj2){obj.style.display='block'}
}


function checkParent(t){
while(t.parentNode){
if(t==document.getElementById('anmelden')){
return false
}
t=t.parentNode
}
return true
}
</script>



<script type="text/javascript">

	function anmeldescript () {
	  document.write("<a class='infobox1' id='sho' href='#'>Anmelden<a>");
	}
</script>
	


	
<noscript><a class="infobox1" href="#">ohne JS</a></noscript>

<script type="text/javascript">
anmeldescript();
</script>	

<a class="infobox2" href="#">Kontakt</a>
<a class="infobox3" href="#">Hilfe</a>	
	
	


[{ if $oxcmp_user }]
 [{oxid_include_dynamic file="dyn/top_account.tpl" type="account"}]

[{else}]
<div id="anmelden" style="display:none;">
[{oxid_include_dynamic file="dyn/cmp_login_right.tpl" type="login" pgnr=$pageNavigation->actPage tpl=$tpl additional_form_parameters="`$AdditionalFormParameters`"|cat:$oViewConf->getNavFormParams() }]
</div>
[{/if}]