Startelement auslesen
Samuel Vogel
- javascript
0 MudGuard0 WebFix0 Samuel Vogel0 Cheatah0 WebFix0 Samuel Vogel0 Cheatah
0 WebFix0 Cheatah
0 molily
0 Thomas Meinike
Hallo,
Ich hab schon bei SelfHTML gesucht aber nicht das richtige gefunden.
Ich hab nen Link und bei mouseover wird ne JS Funktion aufgerufen.
Wie kann jetzt die Funtkion feststellen aus welchem a Objekt sie aufgerufen wurde?
mfg samy,
Hi,
Ich hab nen Link und bei mouseover wird ne JS Funktion aufgerufen.
Wie kann jetzt die Funtkion feststellen aus welchem a Objekt sie aufgerufen wurde?
Gar nicht - es sei denn, beim Aufruf wurde dieses (this) Objekt als Parameter mitgeliefert.
cu,
Andreas
Hallo!
Also zwei Möglichkeiten fallen mir auf Anhieb ein:
1. Du übergibst wie MudGuard ja bereits erwähnt hat das Element beim Aufruf. Also z.B. onMouseOver="MyFunction(this)".
2. (Nur IE) Es existiert das Event-Objekt.<C:\Programme\SelfHTML\javascript\objekte\event.htm>. In SelfHTML sind nur einige wenige abfragbaren Eigenschaften aufgelistet.
Hier findest Du mehr: http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/obj_event.asp
Also kannst Du mittels event.fromElement das auslösende Element des Events abfragen.
Ich sehe gerade, daß das event-Objekt eine Empfehlung für DOM level 2 ist, also bleibt es dir überlassen, das auch mal in anderen Browsern zu testen.
Gruß
WebFix
Gude,
Ich übergebe jetzt einfach den die id an die Funktion aber:
Warum geht das hir 'document.all.button.offsetHeight' nur wennn ich das wo jetzt button steht nur wenn ich die id hinschreibe? ich hätte gerne dass die id da per Variable eingesetz wird!
mfg samy,
Hi,
Ich übergebe jetzt einfach den die id an die Funktion aber:
das ist nicht einfach, sondern umständlich. Jetzt musst Du Dir die Objektreferenz erst suchen, die Du direkt hättest übergeben können.
Warum geht das hir 'document.all.button.offsetHeight'
Also, wenn bei Dir der Fall vorliegt, dass Du nur den IE 4 beachten musst, dann solltest Du das schon in der ursprünglichen Frage erwähnen.
nur wennn ich das wo jetzt button steht nur wenn ich die id hinschreibe? ich hätte gerne dass die id da per Variable eingesetz wird!
Ich verstehe kein Wort, kann Dir aber sagen, dass dieser Gedankengang hinfällig ist.
Cheatah
Ich übergebe jetzt einfach den die id an die Funktion aber:
das ist nicht einfach, sondern umständlich. Jetzt musst Du Dir die Objektreferenz erst suchen, die Du direkt hättest übergeben können.
Versteh ich nicht! Es wurde doch gesagt dass es anders nicht geht, als die id an die Funktion zu übergeben. (Der Opera Browser übergibt wenn ich this benutze den Pfad zu Datei aufm Server!
Warum geht das hir 'document.all.button.offsetHeight'
Also, wenn bei Dir der Fall vorliegt, dass Du nur den IE 4 beachten musst, dann solltest Du das schon in der ursprünglichen Frage erwähnen.
Muss ich nicht!
nur wennn ich das wo jetzt button steht nur wenn ich die id hinschreibe? ich hätte gerne dass die id da per Variable eingesetz wird!
Ich verstehe kein Wort, kann Dir aber sagen, dass dieser Gedankengang hinfällig ist.
Nein der ist nicht hinfällig! Und ich meinte warum kann ich dem hier: 'document.all.-->button<--.offsetHeight' nicht bei button ne Variable übergeben die die id des Ziel Objekts entält!
Und sorry für meine schlechte Ausdrucksweise!
mfg samy,
Hi,
Versteh ich nicht!
was genau verstehst Du nicht?
Es wurde doch gesagt dass es anders nicht geht, als die id an die Funktion zu übergeben.
Wurde es? Wer immer das Tat: Es ist falsch.
(Der Opera Browser übergibt wenn ich this benutze den Pfad zu Datei aufm Server!
Das kann gar nicht sein, weil ein HTTP-Client keine Chance hat, die Verzeichnisstruktur auf einem Server zu ermitteln. Nach meiner Beobachtung verhält sich Opera im Zusammenhang mit 'this' korrekt.
Warum geht das hir 'document.all.button.offsetHeight'
Also, wenn bei Dir der Fall vorliegt, dass Du nur den IE 4 beachten musst,
Muss ich nicht!
Warum verwendest Du dann Code, der nur bei IE 4 Sinn macht?
Ich verstehe kein Wort, kann Dir aber sagen, dass dieser Gedankengang hinfällig ist.
Nein der ist nicht hinfällig!
Doch, ist er.
Und ich meinte warum kann ich dem hier: 'document.all.-->button<--.offsetHeight' nicht bei button ne Variable übergeben die die id des Ziel Objekts entält!
Aha, danke. Das hat WebFix mittlerweile - als einer von sehr, sehr vielen in diesem Forum - erklärt.
Cheatah
Hi,
(Der Opera Browser übergibt wenn ich this benutze den Pfad zu Datei aufm Server!
Hm. Seltsam:
<script style="text/javascript">
function blubb(bla)
{
alert(bla);
bla.style.display="none";
}
</script>
<a href="" onclick="blubb(this);return false;">clicktest</a>
zeigt im alert tatsächlich die URL.
Aber die Style-Anweisung läßt den Link verschwinden.
cu,
Andreas
Hi,
zeigt im alert tatsächlich die URL.
Und zwar nicht die URL des aktuellen Dokuments, sondern des Dokuments, auf das das href-Attribut des Links verweist.
cu,
Andreas
Hallo,
Hm. Seltsam:
<script style="text/javascript">
function blubb(bla)
{
alert(bla);
bla.style.display="none";
}
</script>
<a href="" onclick="blubb(this);return false;">clicktest</a>zeigt im alert tatsächlich die URL.
Aber die Style-Anweisung läßt den Link verschwinden.
Das a-Elementobjekt hat Eigenschaften vom Location-Objekt (http://de.selfhtml.org/javascript/objekte/location.htm, alert(location.constructor) im Mozilla), also z.B. protocol. Wie window.location hat bla einen value, daher verhält es sich wie ein String, ohne String-Eigenschaften (wie length) oder String-Methoden (wie substring) zu besitzen. alert(typeof bla.constructor) wird (zumindest im Mozilla) wie erwartet [HTMLAnchorElement] ausgeben. Es wird also kein String übergeben, sondern tatsächlich das das Elementknoten-Objekt. Daher funktioniert auch der Zugriff auf style. Das ist eine seltsame Konstruktion, weil sie sich nicht nachvollziehen lässt:
var x = new Object('beispielwert');
alert(x);
alert(x.valueOf());
alert('typ: ' + typeof(x));
alert('konstruktor: ' + x.constructor);
alert('substring: ' + typeof(x.substring));
Der Konstruktor ist unweigerlich String, was nach ECMAScript auch logisch erscheint. Die a-Elementknoten und window.location sind also Sonderfälle, die wahrscheinlich zur Abwärtskompatibilität noch funktionieren.
Mathias
Gude,
Ich übergebe jetzt einfach den die id an die Funktion aber:
Warum geht das hir 'document.all.button.offsetHeight' nur wennn ich das wo jetzt button steht nur wenn ich die id hinschreibe? ich hätte gerne dass die id da per Variable eingesetz wird!mfg samy,
Das ist einfach:
function AufrufBeiOnMouseOver(Elem_ID) {
document.all[Elem_ID].offsetWidth ...
...
Noch eins: Du weißt hoffentlich daß das mit "document.all" nur für IE und Opera funcktioniert... (ansonsten getElementById() verwenden)
Gruß
WebFix
Hallo,
OK danke. Im gegensatz zu Cheatah hast du nicht gemotzt sondern es mir erklärt! Danke.
mfg samy,
Hi,
OK danke. Im gegensatz zu Cheatah hast du nicht gemotzt sondern es mir erklärt! Danke.
im Gegensatz zu meinen Beiträgen hat WebFix Dir zwar geantwortet, aber nicht geholfen.
Cheatah
Entschuldigung, da hab ich wohl etwas versaubeutelt und den lokalen Link bei mir angegeben...
Der MS-Link ist ausnahmsweise hier auch hilfreicher. Also einfach die Klammern und das "link:" weglassen. (Komisch, daß er das jetzt nicht als Link anzeigt?!)
WebFix
Hi,
Also einfach die Klammern und das "link:" weglassen. (Komisch, daß er das jetzt nicht als Link anzeigt?!)
das liegt daran, dass Du keine gültige URL angegeben hast: Die Slashes sind im Query-String nicht erlaubt.
Cheatah
Hallo,
- (Nur IE) Es existiert das Event-Objekt.
Also kannst Du mittels event.fromElement das auslösende Element des Events abfragen.
fromElement beinhaltet den Elementknoten, von dem die Maus bei einem mouseover-Event *kam*, nicht den, dem der mouseover-Event passierte. Das steht auch auf der verlinkten Seite. srcElement wäre passender.
Ich sehe gerade, daß das event-Objekt eine Empfehlung für DOM level 2 ist, also bleibt es dir überlassen, das auch mal in anderen Browsern zu testen.
Bei onmouseover="bla()" hat die Funktion keine Möglichkeit, an das Event-Objekt zu kommen. window.event ist nach wie vor eine Microsoft-Erfindung. DOM 2 Events kennt strenggenommen nur addEventListener, womit die Zuweisung außerhalb eines onmouseover-Attributs erfolgen muss.
Mathias
Hallo,
Ich hab nen Link und bei mouseover wird ne JS Funktion aufgerufen.
Wie kann jetzt die Funtkion feststellen aus welchem a Objekt sie aufgerufen wurde?
Leider auch nur im IE zu gebrauchen ist die Eigenschaft sourceIndex, mit der man über getElementsByTagName("*") den jeweiligen Elementknoten ausfindig machen kann. In diesem Beispiel werden die Links nach dem Anklicken ueber eine Funktion rot gefaerbt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test by TM 09/04</title>
<script language="JavaScript" type="text/javascript">
<!--
var d;
function Init()
{
d=document.getElementsByTagName("*");
}
function Test(idx)
{
alert(idx);
d.item(idx).style.color="#F00";
}
//-->
</script>
</head>
<body onload="Init()">
<a href="test1.htm" onclick="Test(this.sourceIndex);return false">Test 1</a>
<a href="test2.htm" onclick="Test(this.sourceIndex);return false">Test 2</a>
<a href="test3.htm" onclick="Test(this.sourceIndex);return false">Test 3</a>
</body>
</html>
MfG, Thomas