Campari.eX: probleme mit onmouseup-event

irgendwie geht bei mir kein onmouseup, bzw da wird das bild einfach nicht angezeigt. (KEIN platzhalter für eine nicht vorhandene grafik, SONDERN einfach tranzparenz... da ist dann einfach nix mehr da.

sobald die maus wieder den bereich verlässt, kommt eine neuer event (mouseout) und die grafik wird wieder normal angezeigt.
passiert aber nur bei mouseup und bei keinem anderen event dass da was verschwindet.

hier der vereinfachte quellcode zum ausprobieren:

<html>
<head>
<script type="text/javascript">
<!--
function MakeArray(size, initvalue){
for(var i = 0; i < size; i++){
this[i] = initvalue;
}
}
function MakeArray2Dim(col, row, initvalue){
for(var i = 0; i < col; i++){
this[i] = new MakeArray(row, initvalue);
}
}
function changeBut(nr, butSrc1, butSrc2)
{
if(butSrc2 == "")
{
OverviewBut[nr].src=butSrc1;
}
else
{
if(eval("but"+nr+"_active == true"))
{
OverviewBut[nr].src=butSrc2;
}
else
{
OverviewBut[nr].src=butSrc1;
}
}
}

var OverviewBut = new MakeArray(50, "");

var but1_1 = "images/nav/buttons/ger/button1_norm.gif";
var but1_2 = "images/nav/buttons/ger/button1_acti.gif";
var but1_3 = "images/nav/buttons/ger/button1_over.gif";
var but1_4 = "images/nav/buttons/ger/button1_down.gif";
var but1_active = true

//-->
</script>
</head>
<body>
<img src="images/nav/buttons/ger/button1_norm.gif" width="1" height="1" border="0" alt style="position:absolute;top:0px;left:0px;">
<img src="images/nav/buttons/ger/button1_acti.gif" width="1" height="1" border="0" alt style="position:absolute;top:0px;left:0px;">
<img src="images/nav/buttons/ger/button1_over.gif" width="1" height="1" border="0" alt style="position:absolute;top:0px;left:0px;">
<img src="images/nav/buttons/ger/button1_down.gif" width="1" height="1" border="0" alt style="position:absolute;top:0px;left:0px;">
<a href="javascript:void(0)" onFocus="if(this.blur)this.blur()" onMouseover="changeBut(1, but1_3, '')" onMouseout="changeBut(1, but1_1, but1_2)" onMousedown="changeBut(1, but1_4, '')" onMouseup="changeBut(1, but1_1, but1_2)">
<img SRC="images/nav/buttons/ger/button1_acti.gif" border="0" onload="OverviewBut[1]=this" WIDTH="169" HEIGHT="31">
</a>
</body>
</html>
------
wenn ich das obere href dur dashier ersetze, geht der mouseup-event auch nicht. es liegt also nicht an der konstruktion mit dem array.
<a href="javascript:void(0)" onMousedown="document.images['bild1'].src=but1_4" onMouseup="document.images['bild1'].src=but1_1" onMouseover="document.images['bild1'].src=but1_3" onMouseout="document.images['bild1'].src=but1_1">
<img name="bild1" SRC="images/nav/buttons/ger/button1_acti.gif" border="0" WIDTH="169" HEIGHT="31">
</a>

ich hoffe mir kann jemand in irgendeiner form weiterhelfen.
danke schön schonmal.

  1. Hi Da ich auch immer probleme habe mit den events, habe ich mir den Code  mal zu Gemühte geführt.

    hier der vereinfachte quellcode zum ausprobieren:

    <html>
    <head>
    <script type="text/javascript">
    <!--
    function MakeArray(size, initvalue){
    for(var i = 0; i < size; i++){
    this[i] = initvalue;
    }
    }
    function MakeArray2Dim(col, row, initvalue){
    for(var i = 0; i < col; i++){
    this[i] = new MakeArray(row, initvalue);
    }
    }

    function changeBut(nr, butSrc1, butSrc2)
    {
    if(butSrc2 == "")
    {
    OverviewBut[nr].src=butSrc1;
    }
    else
    {
    if(eval("but"+nr+"_active == true"))
    {
    OverviewBut[nr].src=butSrc2;
    }
    else
    {
    OverviewBut[nr].src=butSrc1;
    }
    }
    }

    Die obige funktion lässt sich wohl vereinfachen (nicht ausprobiert)

    function changeBut(nr, butSrc1, butSrc2)
    {
    if ((butSrc2 == "") && (eval("but"+nr+"_active") == true))
    {
    OverviewBut[nr].src = butSrc2;
    }
    else
    {
    OverviewBut[nr].src = butSrc1;
    }
    }

    var OverviewBut = new MakeArray(50, "");

    (var OverviewBut - könnte auch vor fkt.- changeBut stehen)

    var but1_1 = "images/nav/buttons/ger/button1_norm.gif";
    var but1_2 = "images/nav/buttons/ger/button1_acti.gif";
    var but1_3 = "images/nav/buttons/ger/button1_over.gif";
    var but1_4 = "images/nav/buttons/ger/button1_down.gif";
    var but1_active = true

    (? was ist mit var but2_active ... ich nehem an den Teil haste rausgeschnitten. Hinweis: es kann eine Variable erst in einer Bedingung verwendet werden, wenn sie schon vorher initalisiert wurde

    • ich meine den konflikt mit dem eval("but"+nr+"_active"), wenn nr=2)

    //-->
    </script>
    </head>
    <body>
    <img src="images/nav/buttons/ger/button1_norm.gif" width="1" height="1" border="0" alt

    (hier müsste noch das alt-attribut verfollständigt werden)
     style="position:absolute;top:0px;left:0px;">

    <img src="images/nav/buttons/ger/button1_acti.gif" width="1" height="1" border="0" alt style="position:absolute;top:0px;left:0px;">
    <img src="images/nav/buttons/ger/button1_over.gif" width="1" height="1" border="0" alt style="position:absolute;top:0px;left:0px;">
    <img src="images/nav/buttons/ger/button1_down.gif" width="1" height="1" border="0" alt style="position:absolute;top:0px;left:0px;">
    <a href="javascript:void(0)" onFocus="if(this.blur)this.blur()" onMouseover="changeBut(1, but1_3, '')" onMouseout="changeBut(1, but1_1, but1_2)" onMousedown="changeBut(1, but1_4, '')" onMouseup="changeBut(1, but1_1, but1_2)">

    Das onfocus event verstehe ich nicht. Was führ ein Sinn hat es beim focusieren eines Objektes abzufragen, ob es verlassen wurde (wo es doch erst focusiert wurde). und nach der Abfrage auch noch ein verlassen ereigniss zu schicken. - Vieleicht ist das die Wurzel des Übels :-)

    <img SRC="images/nav/buttons/ger/button1_acti.gif" border="0" onload="OverviewBut[1]=this" WIDTH="169" HEIGHT="31">
    </a>
    </body>
    </html>

    wenn ich das obere href dur dashier ersetze, geht der mouseup-event auch nicht. es liegt also nicht an der konstruktion mit dem array.
    <a href="javascript:void(0)" onMousedown="document.images['bild1'].src=but1_4" onMouseup="document.images['bild1'].src=but1_1" onMouseover="document.images['bild1'].src=but1_3" onMouseout="document.images['bild1'].src=but1_1">
    <img name="bild1" SRC="images/nav/buttons/ger/button1_acti.gif" border="0" WIDTH="169" HEIGHT="31">
    </a>

    Im grossen und ganzen kann ich leider nicht sagen woran der eigentlich oben beschriebene Fehler liegt ( habe es auch nicht ausprobiert)
    Doch vieleicht ghört es ja zu einer ähnlichen kategorie wie ich es auch schon mal erlebt habe. Dass in dem Moment eines mouseover auch ein mouseout ereibniss geschieht, da der browser den Grenzfall nicht richtig erkennt. Dh. am rande eines Bildes weis der browser nicht ob die maus nun gerad ins bild oder aus dem bild kommt, also ob es ein mosueover oder mouseout ist. genaus veileicht auch, ob es ein focus oder blur ist.
    Ich neheme an das dies mit "onfocus="if(this.blur) this.blur();""
    gelösst werden soll. Ob es eine Lösung ist bin ich mir nicht sicher. Zudem wird in diesem Quellcode kein onblur verwendet. sollte es egal sein, ob das onblur ereigniss geschieht.
    Vieleicht irre ich mich auch.

    auf gute Zusammenarbeit
    seboeh

    1. Hi Da ich auch immer probleme habe mit den events, habe ich mir den Code  mal zu Gemühte geführt.

      Die obige funktion lässt sich wohl vereinfachen (nicht ausprobiert)
      --- stimmt. ist aber irrelevant ---

      (? was ist mit var but2_active ... ich nehem an den Teil haste rausgeschnitten.
      --- ja ---
      var OverviewBut - könnte auch vor fkt.- changeBut stehen
      Hinweis: es kann eine Variable erst in einer Bedingung verwendet werden, wenn sie schon vorher initalisiert wurde

      • ich meine den konflikt mit dem eval("but"+nr+"_active"), wenn nr=2)

      --- weiss ich, die funktionen werden ja auch erst aufgerufen wenn das html da ist, also ist es auch egal wo initialisiert wird. aber ich kanns davorschreiben.---

      hier müsste noch das alt-attribut verfollständigt werden
      --- hab noch nie verstanden warum das alt-attribut zwingend erforderlich ist :)---

      Das onfocus event verstehe ich nicht. Was führ ein Sinn hat es beim focusieren eines Objektes abzufragen, ob es verlassen wurde (wo es doch erst focusiert wurde). und nach der Abfrage auch noch ein verlassen ereigniss zu schicken. - Vieleicht ist das die Wurzel des Übels :-)
      --- nein es ist nicht die wurzel allen übels es geht auch ohne das nicht. der sinn dieses events ist es, den markierungsrahmen wegzukriegen, der normalerweise um eine grafik entsteht wenn man draufklickt. das ist bei grafischem layout nicht soo toll ---

      Im grossen und ganzen kann ich leider nicht sagen woran der eigentlich oben beschriebene Fehler liegt ( habe es auch nicht ausprobiert)
      --- schade ---

      Doch vieleicht ghört es ja zu einer ähnlichen kategorie wie ich es auch schon mal erlebt habe. Dass in dem Moment eines mouseover auch ein mouseout ereibniss geschieht, da der browser den Grenzfall nicht richtig erkennt. Dh. am rande eines Bildes weis der browser nicht ob die maus nun gerad ins bild oder aus dem bild kommt, also ob es ein mosueover oder mouseout ist. genaus veileicht auch, ob es ein focus oder blur ist.
      Ich neheme an das dies mit "onfocus="if(this.blur) this.blur();""
      gelösst werden soll.
      --- nein die funktion hab ich oben beschrieben hat damit nix zu tun.---

      Ob es eine Lösung ist bin ich mir nicht sicher. Zudem wird in diesem Quellcode kein onblur verwendet. sollte es egal sein, ob das onblur ereigniss geschieht.
      Vieleicht irre ich mich auch.
      --- und vielleicht gibt es keine lösung. wundert mich aber dass man über dieses problem im netz wenig bis nix findet. das sollte doch vielen leuten probleme bereiten. so selten werden die events auch nicht benutzt... ---

      auf gute Zusammenarbeit
      --- ebenso, vielleicht solltest du es doch kurz mal probieren... ---

      seboeh
      --thx campari.ex