• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

onmouseover Funktion zuweisen

Status
Für weitere Antworten geschlossen.

andynail

Mitglied
Hallo zusammen,

ich sitze vor dem Problem in bestimmten Situationen onmouseover abzuschalten:

Code:
 for (i = 1; i < parent.document.getElementsByName("Bereiche").length; i++)
 {
 parent.document.getElementsByName("Bereiche")[i].onmouseover = function() {};
 }

und wieder einschalten zu wollen:

Code:
 for (i = 1; i < parent.document.getElementsByName("Bereiche").length; i++)
 {
 parent.document.getElementsByName("Bereiche")[i].onmouseover = new Function("MenueDown(" + i + ")"); 
 }

Und auch wenn ich jetzt die Zeile mit new function so schreibe:
Code:
parent.document.getElementsByName("Bereiche")[i].onmouseover = function() { MenueDown(i); };

Es passiert nie etwas beim drüberfahren mit der Maus. Lasse ich onmouseover anzeigen, erhalte ich in der 2. Variante immer i anstatt den Wert.

Danke gruß Andreas
 
Werbung:
Wieso schreibst Du diese Zeile überhaupt um? "new Function" ist genau der richtige Weg. Was geht dort denn nicht?
 
Hallo

Es passiert nach dem Zuweisen nix beim drüberfahren mit der Maus über den betreffenden Bereich. Als hätte ich keine Funktion zugewiesen. Ausgeschaltet wird die Funktion.

Gruß Andreas
 
Werbung:
Hier ein hoffentlich funktionierendes Beispiel. Was bei dir falsch ist, kann man (ich) so nicht sagen.

Code:
<!DOCTYPE html>

<html>

<head>
    <title>test</title>
    <script type="text/javascript">
    function mouseoverOn()
    {
        var tests = document.getElementById('demo').getElementsByTagName('div');
        for (var i = 0; i < tests.length; i++) {
            tests[i].onmouseover = function () {
                this.style.backgroundColor = '#0f0';
            }
            tests[i].onmouseout = function () {
                this.style.backgroundColor = '#f00';
            }
        }
    }

    function mouseoverOff()
    {
        var tests = document.getElementById('demo').getElementsByTagName('div');
        for (var i = 0; i < tests.length; i++) {
            tests[i].onmouseover = null;
            tests[i].onmouseout = null;
        }
    }

    window.onload = function()
    {
        mouseoverOn();
        document.getElementById('mouseover-on').onclick = mouseoverOn;
        document.getElementById('mouseover-off').onclick = mouseoverOff;
    }
    </script>
</head>

<body>

    <div id="demo">
        <div style="width: 50px; height: 50px; background: #f00;"></div>
        <div style="width: 50px; height: 50px; background: #f00;"></div>
        <div style="width: 50px; height: 50px; background: #f00;"></div>
        <div style="width: 50px; height: 50px; background: #f00;"></div>
    </div>

    <button id="mouseover-on">On</button>
    <button id="mouseover-off">Off</button>

</body>

</html>
 
new Function() sollte man nur in Ausnahmefällen benutzen.

Code:
parent.document.getElementsByName("Bereiche")[i].onmouseover = function() { MenueDown(i); };
"i" wird geclosured, hat also innerhalb der Funktion immer den letzten Wert vom Schleifendurchlauf.

Events entfernt man besser mit removeEventListener() oder setzt onfoobar auf "null". Wobei man die Funktionen nicht immer neu definieren sollte, damit das Script schneller ist.
 
Hallo und Danke,

doch kann weis ich ja das man die Farbe ändern kann. Doch will ich eine komplette Funktion zuweisen.

Und es wird i angezeigt und kein Wert den ich aber brauche.

Gruß Andreas
 
Werbung:
So? Geht bestimmt schlauer, aber so klappt es, zu jeder Funktion das passende i zu bekommen.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript">
    // <!--
    function mouseoverOn()
    {
        var tests = document.getElementById('demo').getElementsByTagName('div');
        for (var i = 0; i < tests.length; i++) {
            var f = function(i)
            {
                tests[i].onmouseover = function()
                {
                    document.getElementById('debug').innerHTML = i;
                }
                tests[i].onmouseout = function()
                {
                    document.getElementById('debug').innerHTML = '';
                }
            }

            f(i);
        }
    }

    function mouseoverOff()
    {
        var tests = document.getElementById('demo').getElementsByTagName('div');
        for (var i = 0; i < tests.length; i++) {
            tests[i].onmouseover = null;
            tests[i].onmouseout = null;
        }
    }

    window.onload = function()
    {
        mouseoverOn();
        document.getElementById('mouseover-on').onclick = mouseoverOn;
        document.getElementById('mouseover-off').onclick = mouseoverOff;
    }
    // -->
    </script>
</head>

<body>

    <div id="demo">
        <div style="width: 50px; height: 50px; background: #f00;"></div>
        <div style="width: 50px; height: 50px; background: #f00;"></div>
        <div style="width: 50px; height: 50px; background: #f00;"></div>
        <div style="width: 50px; height: 50px; background: #f00;"></div>
    </div>

    <p>
        <button id="mouseover-on">On</button>
        <button id="mouseover-off">Off</button>
    </p>

    <div id="debug"></div>

</body>

</html>
 
Hallo

Nein es passiert nix. In der aufzurufenden Funktion steht auch ein alert das nicht angezeigt wird. Also entschied ich mich in der aufgerufenen Funktion mit if then abzufragen ob denn überhaupt ein Menü eingeblendet werden darf.

Das ganze reisßt jetzt höchstwahrscheinlich eh ab, da auch in einer Tabellenzelle ein Link steht mit dem eine Funktion aufgerufen wird, abgeschaltet wird und anschließend wieder zugewiesen werden soll. Erst speichere ich MainLink diesen funktionsaufruf, schalte ihn aus mit ="#" und erhalte anschließend nur noch MainLink den Wert "#". Und eine Funktionsleiste und eine ohne will zusammen auch nicht laufen.

Also egal was: Es funktioniert nix.
Villeicht auch noch zur Ergänzung: Die Leiste wird erstellt mit php.

Gruß Andreas
 
Zuletzt bearbeitet:
Werbung:
Nein es passiert nix. In der aufzurufenden Funktion steht auch ein alert das nicht angezeigt wird.
Das klingt stark danach, als ob du nicht weißt wo die JS Fehlermeldungen in deinem Browser angezeigt werden. Welchen Browser benutzt du?

Ansonsten hilft uns konkreter Code mehr weiter, als deine Beschreibungen.
 
Was solln das jetzt bitte?

Ob der IE mit seinen Fehlermeldungen oder die Fehlerkonsole des ff. Ist sttets das Gleiche: Fehlerfrei.

Und code wäre wohl zu umfangreich. Alles macht der ie mit, aber ff versteht den code wohl nicht: aus 80px werden 84px, visibility:hidden wird nix usw.... Aber wie das mit der Variable zustande kommt ist nicht nachvollziehbar. Die Variable bekommt nur einmal einen Wert zugewiesen.

Gruß Andreas
 
Hallo und was solln das jetzt bitte? Ob ich die Fehlermeldungen im ie anzeigen lasse oder im ff die Fehlerkonsole anschaue. Das Ergebnis ist immer das Gleiche. Den Code wie der mit der 2. Zeile und das Zuweisen einer Funktion hab ich bereits verworfen. ff zeigte troz echo="visibility:hidden" diese immer an. Und das einmalige Zuweisen an eine Variable funktionierte ja auch nicht. Der ganze code wäre zu umfangreich.
 
Werbung:
Werbung:
Hallo und OK.

ch war dabei die php Funktion zu wiederholen. Und ich muß wohl gestern was übersehen haben, denn jetzt funktionierts. Ich erstelle also zwei Zeilen und blende einfach die Zeile ohne Funktionen ein. Das erspart mir das Zuweisen von Funktionen, obwohl ich dieses an einer anderen Stelle an Buttons bräuchte, und das Speichern in einer Variable. Villeicht muß ich mich später noch einmal melden.

Gruß Andreas
 
ch war dabei die php Funktion zu wiederholen. Und ich muß wohl gestern was übersehen haben, denn jetzt funktionierts.
Merkst du was?
Wir sollen raten was du falsch machen könntest, obwohl du (in diesem Fall) nichts falsch machst. Das ist nervig und absolut nicht zielführend, weder für dich noch für uns.

Daher ist es immer ratsam eine Frage so zu formulieren, dass es auch derjenige der nicht neben dir am Rechner sitzt die Frage versteht. Und im zweifelsfall Beispielcode entwickeln, an dem man sieht was du konkret machst.

Zumal es nicht selten so ist, dass wenn man sich Gedanken über sein Problem macht und den Code versucht zu kürzen, dabei den Fehler selbst entdeckt.
 
Hallo

ich frage mich aber ob es denn so überhaut gemacht wird und daher hier die Codes:

Ich erstelle mit php eine Leiste bestehend aus einem Link und Zellen die mit onmouseover ein Menü einblenden:

PHP:
echo "<div style='position:absolute; left:150px; margin-left:4%; top:31px; z-index:4; background-repeat:repeat-x; background-position:0px; overflow:hidden'>";
echo "<table id='BereichMenue' cellspacing='0' style='border:1px solid #000; border-color:#000; color:#000; table-layout:fixed; background-image:url(Pictures/VerlaufAuswahl.jpg)'>";
echo "<tr id='BereicheFunc' height='32px' style='display:table-row'>";
$BereicheArray = array();
$a = 0;
$datei = fopen("Bereiche.db", "r");
$Text = fgets($datei); 
$Bild = fgets($datei); 
$Hoch = fgets($datei); 
$Breit = fgets($datei); 
echo "<td Name='Bereiche' ID='Bereiche' align='center' width='80px' onmouseover='MainHighlight(1)' onmouseOut='MainHighlight(0)' ><a href='main.html?b=0&t=$Text&p=$Bild&h=$Hoch&w=$Breit' class='MainCtl' target='Daten'>$Text</a></td>";
$BereicheArray[] = $Text;
$b = 5;
while(!feof($datei))
{ 
$Text = fgets($datei); 
if ($b == 6)
{
echo "<td Name='Bereiche' ID='Bereiche' align='center' width='80px' onmouseover='MenueDown($a)' onmouseOut='MenueUp($a)'>$Text</td>";
$BereicheArray[] = $Text;
$a = $a + 1;
$b = 1;
}
$b++;
}
fclose($datei);
echo "</tr>";
echo "<tr id='BereicheBreak' height='32px' style='display:none'>";
for ($i = 0; $i < count($BereicheArray); $i++)
{
echo "<td align='center' width='80px'>$BereicheArray[$i]</td>";
}
echo "</tr>";
echo "</table>";
echo "</div>";
echo "<div id='Hintergrund' name='Hintergrund' top='0' left='0' style='position:absolute; height:100%; width:100%; visibility:hidden'><img id='Hintergrundbild' name='Hintergrundbild' src='Pictures/Bereich-1.jpg' style='width:100%; height:100%'></div>";
$datei = fopen("Bereiche.db", "r");

Und jetzt will ich für weitere Verwendung den erstellten Link speichern:

Code:
MainLink = document.links[0]

Beim Aufrufen bestimmter Formularre wird die Funktion Aktivieren mit der Zeile:

Code:
parent.document.links[0].href = "#"

und es werden die wie bereits geschrieben die onmouseover Funktionen ausgeschaltet.

Wird das Formular geschlossen wird die Funktion Deaktivieren aufgerufen. In dieser sollen der gespeicherte Link und die onmouseover Funktionen wieder zugewiesen werden. Doch verhält sich die Leiste ständig als ob nie eine Funktion zugewiesen wurde. Diese Funktion lautet MenueDown(Index) und enthält testweise ein alert. Da dies aber nie funktionierte erstellte ich eine Variable MenueAnzeigen, wies entsprechend true oder false zu und fragte diesen Wert in der Funktion MenueDown ab. Und der enthaltene Link soll mit
Code:
parent.document.links[0].href = MainLink
wieder zugewiesen werden, zeigt aber bei einem Test-alert(MainLink) "#" an und nicht den vorab gespeicherten Wert.

Villeicht besteht doch noch die Möglichkeit den momentanen Stand zu verbessern, da die Einträge in der Funktionsleiste durch die iframe Seiten (Linksammlungen) markiert werden. Und dies jetzt in zwei Zeilen, so daß doch die Variante mit nur einer Leiste die Bessere wäre.

Danke Gruß Andreas
 
Zuletzt bearbeitet:
Werbung:
Ich hab kein Wort verstanden, zumal ich nicht den Code sehe, von dem du sprichst. Was aber schonmal problematisch ist, ist das nicht alle HTML Elemente ein name Attribut haben und das eine ID nur einmal im Dokument vorkommen darf. Beide Regeln mißachtest du.

Dann frage ich mich, warum du hier eine Tabelle benutzt? Sie ist völlig unötig und erschwert dir evtl. die Arbeit,
 
Hallo

welche Funktion soll ich zeigen?

Code:
function MenueDown(index)
{
 parent.document.getElementsByName("Menues")[index].style.visibility="visible";
 parent.document.getElementsByName("Bereiche")[index+1].style.backgroundColor = "#999999";
 MenueID = index
}

Die zweite Zeile ist mir bewusst noch keinen Namen hinzugefügt zu haben. Das id noch mit drin steht kommt aus früheren Zeiten mit dem ie. Und es ist eine Tabelle damit die Bereiche unterm Text ausgefüllt sind und alles mit einem Rahmen versehen werden kann.

Gruß Andreas
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben