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]
hallo avenger,
das script wird einmal beim laden aufgerufen. habs mit “alert” getestet.
anschließend wird bei einem klick kein functionsaufruf mehr gestartet.
[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…
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.
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
danke für deine mühe!!!
PS: Aber echt schade. Sieht nämlich echt geschmeidig aus, wenn das so wieder zu geht
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
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 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}]