selfhtml.de - Alles für den Webmaster!

 

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Bilderwechsel

Autor: Cemaver
Datum: 17.02.2010 18:19:53

Hallo Leutz ;)

Hab ein kleines Problem, dieser Code funktioniert im Firefox einwandfrei - aber im IE gibt er mir ein "document.just.src' ist Null oder kein Objekt" aus.

soweit ich sehe scheint doch dort alles zu passen:

<script type='text/javascript'>
    var i=0;
    function slide() {
if(i==0){
            i++;
            this.document.just.src ='../dbimg/b.jpg';
            setTimeout('slide()','2000');
        }else{
            i--;
            this.document.just.src ='../shop/dbimg/bs.jpg';
            setTimeout('slide()','2000');
        }
    }
        </script>
        </head><body onload='slide()'>



<image width='200' height='300' src='javascript:;' alt='test' id='just' />

hoffe ihr könnt mir helfen, danke schonmal ;)
wie gesagt, im FF läufts problemlos.



Re: Bilderwechsel

Autor: reporter
Datum: 18.02.2010 15:09:07

Hallo,

was spricht dafür den klassischen Weg, wie http://de.selfhtml.org/javascript/objekte/images.htm#src vorschlägt, nicht zu benutzen?



Re: Bilderwechsel

Autor: Cemaver
Datum: 18.02.2010 15:42:13

huhu,

genau von dem code hatte ichs mir mehr oder minder abgeschaut, allerdings wollte ich halt direkt auf "document.JUST.src" verweisen.

sonst sehe ich auch keinen großen unterschied bei beiden codes (bis auf das array) ;)

aber du hast mir dennoch geholfen, wenn ich document.IMAGES[0].src anspreche meckert auch der IE nicht mehr.

verrät mir noch jemand warum?
IE mags mal wieder nicht?

und danke für den denkanstoss ;)



Re: Bilderwechsel

Autor: reporter
Datum: 18.02.2010 16:13:06

Hallo,

"document.JUST.src" mag wohl syntaktisch richtig sein, aber nicht "this.document.JUST.src". außerdem vermute ich, das die Ie-Implementation, für das Grafik-Objekt', strikt auf das 'name'-Attribute zeigt. Und bekanntlich ist dies bei dir nicht vorhanden.



Re: Bilderwechsel

Autor: Cemaver
Datum: 18.02.2010 16:28:20

oh, das "this." war gestern nur ein test von mir, natürlich ist das so im code nicht vorhanden - war wohl schon ein wenig müd ;)

da ich den ganzen code mit php zusammen bauen lasse ist die "image[0]" lösung nicht ganz das optimum
ich lasse beim anzeigen der grafik prüfen, ob die bilder da sind, ansonsten wird nur ein dummy.jpg angezeigt

wenn ich nun ".image." anspreche versucht er natürlich grundsätzlich die bilder zu ändern - habe ich nun aber schon umgangen ;)

schöner wäre es direkt mir "just" gewesen, aber der liebe IE ...

danke nochmal ;)



Re: Bilderwechsel

Autor: PointedEars
Datum: 05.03.2010 21:17:51

> "document.JUST.src" mag wohl syntaktisch richtig
> sein, aber nicht "this.document.JUST.src".

Beides ist natürlich syntaktisch korrekt (kann mit /MemberExpression/ produziert werden), aber nicht semantisch.

> außerdem vermute ich, das die Ie-Implementation,

Es gibt keine _IE_-Implementation.  IE verwendet (wie viele andere Browser) MSHTML als Layout-Engine, entsprechend dessen DOM-Implementation.

> für das Grafik-Objekt', strikt auf das
> 'name'-Attribute zeigt. Und bekanntlich ist dies
> bei dir nicht vorhanden.

Du vermutest falshc[tm].  Mit `this.document.all.just.src' (Gross-/Klein-Schreibung beachten) hätte es funktioniert.  

Natürlich ist `this.document' (`this' ist hier eine Referenz auf das Globale Objekt) hier einigermassen überflüssig (in der Scope Chain hat kein weiteres Objekt eine document-Eigenschaft, daher reicht `document') und `document.all' ist bekanntlich MSHTML-proprietär.

Abhilfe:

  document.images["just"].src

Ab mindestens IE http://6.0.2800.1106 funktioniert das auch nur mit id-Attribut.


PointedEars



Re: Bilderwechsel

Autor: PointedEars
Datum: 05.03.2010 21:42:14

> oh, das "this." war gestern nur ein test von mir,
> natürlich ist das so im code nicht vorhanden -
> war wohl schon ein wenig müd ;)

`this' ist (bis auf eine Ausnahme in Implementationen von ECMAScript Ed. 3) immer eine implizit vorhandene Referenz auf ein Objekt, ausserdem ein reserviertes Wort und *darf* deshalb *nicht* definiert/deklariert werden.

In diesem Fall ist `this' eine Referenz auf das (eingebaute) Globale Objekt, dessen Methode Deine global deklarierte Funktion ist.

Das Globale Objekt hat in allen mir bekannten DOMs eine host-definierte (d.h. nicht im Standard festgelegte, aber durch ihn erlaubte) document-Eigenschaft -- deshalb kannst Du einfach `document' schreiben, das ist in diesem Fall also gleichbedeutend mit `this.document' (referenziert dieselbe HTMLDocument-Instanz).¹

`this.document.just' liefert jedoch keine Objektreferenz, sondern den undefined-Wert, weil diese HTMLDocument-Instanz nunmal keine just-Eigenschaft hat.  Deshalb führt

  this.document.just.src

genauso wie

  document.just.src

zu einem Laufzeitfehler (TypeError) mit der (leicht irreführenden) Nachricht "document.just.src ist `null' oder kein Objekt".

> da ich den ganzen code mit php zusammen bauen
> lasse ist die "image[0]" lösung nicht ganz das
> optimum
> ich lasse beim anzeigen der grafik prüfen, ob die
> bilder da sind, ansonsten wird nur ein dummy.jpg
> angezeigt

Gibt's das auch in sinnvoll (und mit funktionierender Shift-Taste)?

> wenn ich nun ".image." anspreche versucht er
> natürlich grundsätzlich die bilder zu ändern -

Nein, sicher nicht.  Stattdessen führt die Zuweisung zu einem Laufzeitfehler.  Entweder, weil es die Eigenschaft nicht gibt (siehe oben), oder weil Du versuchst, an ein Host-Objekt zuzuweisen.

> habe ich nun aber schon umgangen ;)

Also auf diese Erklärung bin ich jetzt echt gespannt.

> schöner wäre es direkt mir "just" gewesen, aber
> der liebe IE ...

Du musst nur die bisherigen Antworten sorgfältiger lesen, dann klappt's auch mit dem IE.  Siehe auch meine andere Antwort.

Ausserdem unterstützt IE/MSHTML kein XHTML, deshalb sollte HTML 4.01 deklariert und folgerichtig der Slash am Ende des Start-Tags entfernt werden.  PHP musst Du ggf. noch darauf trimmen, HTML statt XHTML zu generieren (z.B. bei nl2br()), oder Du verwendest eigene Funktionen.


HTH

PointedEars
___________
¹  Dies ist natürlich implementationsabhängig.  Die andere Möglichkeit ist, dass sich in der Scope Chain noch vor dem Globalen Objekt ein Host-Objekt befindet, welches eine document-Eigenschaft hat.  Dies könnte dasselbe Objekt sein, welches durch die ebenfalls host-definierte window-Eigenschaft des Globalen Objekts referenziert wird.  Das Ergebnis wäre aber letztendlich dasselbe.



Re: Bilderwechsel

Autor: PointedEars
Datum: 05.03.2010 21:46:35

> > oh, das "this." war gestern nur ein test von
> > mir, natürlich ist das so im code nicht vorhanden
> > - war wohl schon ein wenig müd ;)
>
> `this' ist (bis auf eine Ausnahme in
> Implementationen von ECMAScript Ed. 3) immer eine
> implizit vorhandene Referenz auf ein Objekt,
> ausserdem ein reserviertes Wort und *darf*
> deshalb *nicht* definiert/deklariert werden.

Sorry, gemeint war Edition 5, nicht 3.


PointedEars



Re: Bilderwechsel

Autor: T.Jung
Datum: 05.03.2010 23:00:43

> PHP musst Du ggf. noch
> darauf trimmen, HTML statt XHTML zu generieren
> (z.B. bei nl2br())

Zumindest in Hinsicht auf diesen Befehl ist eine Besserung eingetreten:
Seit PHP 5.3.0 kennt nl2br() _endlich_ einen zweiten Parameter, mit dem man anstelle von <br /> auch <br> ausgeben lassen kann. Siehe
http://de3.php.net/manual/de/function.nl2br.php

Gruß,
Tobias Jung





Re: Bilderwechsel

Autor: PointedEars
Datum: 06.03.2010 10:47:45

> > PHP musst Du ggf. noch
> > darauf trimmen, HTML statt XHTML zu
> > generieren (z.B. bei nl2br())
>
> Zumindest in Hinsicht auf diesen Befehl ist eine
> Besserung eingetreten:
> Seit PHP 5.3.0 kennt nl2br() _endlich_ einen
> zweiten Parameter, mit dem man anstelle von
> <br /> auch <br> ausgeben lassen
> kann. Siehe
> http://de3.php.net/manual/de/function.nl2br.php

Danke, gut zu wissen.


Gruss,

PointedEars



Re: Bilderwechsel

Autor: Cemaver
Datum: 07.03.2010 13:09:03

> ...  Deshalb führt
>
>   this.document.just.src
>
> genauso wie
>
>   document.just.src
>
> zu einem Laufzeitfehler (TypeError) mit der
> (leicht irreführenden) Nachricht
> "document.just.src ist `null' oder kein Objekt".

ah ok, das hilft mir deutlich weiter
dachte unter document liegt direkt mein just


> > da ich den ganzen code mit php zusammen
> bauen
> > lasse ist die "image[0]" lösung nicht ganz
> das
> > optimum
> > ich lasse beim anzeigen der grafik prüfen,
> ob die
> > bilder da sind, ansonsten wird nur ein
> dummy.jpg
> > angezeigt
>
> Gibt's das auch in sinnvoll (und mit
> funktionierender Shift-Taste)?

Shift hat Urlaub ;)
nun, beim aufruf der seite wird anhand der übergebenen artikelnummer geprüft, ob bilder vorliegen.
das lasse ich mit php prüfen, meine lösung ist sehr unschön, funktioniert aber:
wenn keine bilder hinterlegt sind, wird das java-script einfach nicht mit eingebunden, da ansonsten meine lösung mit .images[0]. jedes image-tag ansprechen würde.
gleichzeitig, da kein bild vorhanden, wird ein dummy geladen.

> Du musst nur die bisherigen Antworten
> sorgfältiger lesen, dann klappt's auch mit dem
> IE.  Siehe auch meine andere Antwort.

die 2. antwort brachte mir schon die lösung,
ich werde es aber nochmal über ein ansprechen über document.all.just.src versuchen.
(was mir die oben erwähnte unschöne abfrage ersparen würde)

> ...  PHP musst Du ggf. noch
> darauf trimmen, HTML statt XHTML zu generieren
> (z.B. bei nl2br()), oder Du verwendest eigene
> Funktionen.

verwende eigene funktionen

> ¹  Dies ist natürlich
> implementationsabhängig.  Die andere
> Möglichkeit ist, dass sich in der Scope Chain
> noch vor dem Globalen Objekt ein Host-Objekt
> befindet, welches eine document-Eigenschaft
> hat.  Dies könnte dasselbe Objekt sein,
> welches durch die ebenfalls host-definierte
> window-Eigenschaft des Globalen Objekts
> referenziert wird.  Das Ergebnis wäre
> aber letztendlich dasselbe.

wenn ich doch komplett falsch referenziere, warum interpretiert es firefox dann richtig?

danke für deine detalierten ausführungen!!

MfG



Re: Bilderwechsel

Autor: PointedEars
Datum: 09.03.2010 00:00:44

> > > da ich den ganzen code mit php
> > > zusammen bauen lasse ist die
> > > "image[0]" lösung nicht
> > > ganz das optimum
> > > ich lasse beim anzeigen der grafik
> > > prüfen, ob die bilder da sind,
> > > ansonsten wird nur ein dummy.jpg
> > > angezeigt
> >
> > Gibt's das auch in sinnvoll (und mit
> > funktionierender Shift-Taste)?
>
> Shift hat Urlaub ;)

Tja, ich nicht, und deshalb keine Zeit, Deine Gekliere zu entziffern.


PointedEars



Re: Bilderwechsel

Autor: Cemaver
Datum: 09.03.2010 08:30:27

> Tja, ich nicht, und deshalb keine Zeit, Deine
> Gekliere zu entziffern.

ach komm, solang der satzbau in ordnung ist ....
da sehe ich gerade - image["just"]
das ist ein super hinweis!

ansonsten frag, wenn du mein "Gekliere" nicht verstehst.
kann auch gern nochmal auszüge aus dem quellcode posten.

aber problem ist ja bereits gelöst ;)