• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] "Einfaches" Problem mit If-Konstrukt

psteimann

New member
Hallo Zusammen,

Knn mir jemand sagen, was hier falsch ist?

Problem. es funktioniert zwar soweit, aber der Parameter mode wird anscheinend nicht erkannt. Egal ob ich 1 oder 2 übergebe, es wird immer derselbe clip abgespielt. (aufruf:
<a href="javascript:swap('bild02','images/simulation/Actatek3_Door_Bell.jpg','1')""> <br /> Klingeln </a>)

HTML:
function swap(Bildname,BildURL,mode)
{
	
if (mode = '1')
var soundclip = "sounds/doorbell.mp3";
if (mode = '2')
var soundclip = "sounds/door.wav";

javascript:jBeep(soundclip);	
document.images[Bildname].src = BildURL;

}
 
Zuletzt bearbeitet von einem Moderator:
Bitte benutze zukünftig für kurzen Code im Fliesstext die Inline Tags und für längeren die HTML oder Code Tags.

Zu deiner Frage: Bitte öffne in deinem Browser die Fehlerkonsole mit F12. Dann siehst du, dass deine Stringvergleiche fehlerhaft sind. Man vergleicht mit 2 oder 3 Gleichheitszeichen, mit einem macht man nur Zuweisungen. Ich empfehle Grundlagen JS, z.B. aus SelfHTML. Außerdem recherchiere bitte die Bedeutung des Präfix var und das Thema Scope für Variablen. Ich möchte das jetzt hier nicht nur anreißen und die Lösung zeigen, weil du das m.E. ausführlich lesen solltest, damit es hängen bleibt.

Das Präfix javascript: kann bei dir überall ersatzlos weg.
Und in deinem Aufruf stimmen die Anführungszeichen nicht.
 
Zuletzt bearbeitet:
Statt mit mehreren IF zu arbeiten würde sich auch ein "switch" anbieten, dann könnte die Ausgabe auch, ohne Variable, direkt in die Unterscheidung rein.

Code:
function swap(mode, bildname, bildurl)
{
switch (mode)
 {
  case 1: 
  jBeep ("sounds/...mp3");
  document.img[Bildname].src = Bildurl;
  break;
  case 2: 
  jBeep ("sounds/...wma")
  document.img[Bildnsme].src = Bildurl;
  break;
 }
}
 
Zuletzt bearbeitet:
Sollte es nur ums ändern des Sounds gehen, könnte man auch überlegen, die URL zum Sound der Funktion so zu u übergeben, wie die Bildurl.

Code:
function swap(soundurl, bildname, bildurl)
{
jBeep (soundurl);
document.img[Bildname].src = Bildurl;
}

und eigentlich könntest du den Bildwechsel dann auch gleich innerhalb von jBeep machen.

Code:
jBeep (soundurl,bildname, bildurl);

und dann so aufrufen:

Code:
onClick="jBeep('sounds/song.mp3','bild02','images/simulation/Actatek3_Door_Bell.jpg');"


Die Differnzierung mit mode würde nur dann Sinn machen, wenn du z.B. abfragst, ob der Client "wma" supported oder nicht.
Dann könntest du

Code:
'sounds/song.'+mode

machen, wenn du in der Abfrage den mode auf wma oder mp3 or whatever setzt.
 
Zuletzt bearbeitet:
Hi,

Vorerst Danke für den hint.

Nun Ja, leider geht jetzt gar nix mehr.

Hinweis auf das Lernmittel und die Konsole notiert.

Trotzdem: Auch wenn die Konvention vom Aufruf falsch ist: Vorher hat's funktioniert, nur hat die Unterscheidung (wann welcher Sound) nicht geklappt.
.wma sollte imho von jedem Client unterstützt werden?

Ich hae es jetzt mit allen von Dir vorgeschlagenen Varianten versucht, aber bei mir läuft keine:-(

...............
Aufruf:

Code:
<a href="javascript:swap('sounds/door.wav', bild02','images/simulation/Actatek3_Door_Close.jpg');"
> <br />
 Türe schliessen 
</a>
...............

Code:
function swap(soundurl, bildname, bildurl)
{
jBeep (soundurl);
document.img[Bildname].src = Bildurl;
}

................
Nur um zu zeigen, wie das ganze ungefähr ausschaut.

Actatek Simulator

Nicht mehr ganz aktuell, aber da geht alles noch, mit Ausnahme der Sound-Unterscheidung..
 
Zuletzt bearbeitet von einem Moderator:
Code:
function swap(soundurl, bildname, bildurl)
{
jBeep (soundurl);
document.img[Bildname].src = Bildurl;
}
Vorsicht, JS ist case-sensitive:
Code:
function swap(soundurl, bildname, bildurl) {
   jBeep (soundurl);
   document.img[bildname].src = bildurl;
}
 
Danke Julian, da habe ich beim tippsen nicht drauf geachtet, aber gut das du, vorallem den User, darauf hinzuweist.
 
Bitte öffne in deinem Browser die Fehlerkonsole mit F12. Dann siehst du, dass deine Stringvergleiche fehlerhaft sind.
Leider wird sowas dort nicht angezeigt, sondern einfach nur die Zuweisung ausgeführt... ist ja auch kein Syntaxfehler, sondern ein Logikfehler.

@psteimann: wma ist ein reines Windows Format. Auf Mac und Linux/Unix wird das eher nicht laufen. Und auch auf Windowsmaschinen geht das nicht einmal im IE.
 
Leider wird sowas dort nicht angezeigt, sondern einfach nur die Zuweisung ausgeführt... ist ja auch kein Syntaxfehler, sondern ein Logikfehler.
Ja, mir dämmert was. Also if (mode = '1') heißt, wenn mode der String '1' zugewiesen werden konnte wahr sonst falsch. Richtig?
Böse Falle, hab ich auch nicht direkt erkannt.
 
Allerdings sei, unabhängig vom Format, auch hier der Hinweis auf das Urheberrecht zu gestatten.

Bitte nur MP3s oder was auch immer verwenden, für die man die entsprechenden Aufführungsrechte hat bzw. für die die Lizenz eine derartige Verwendung zulässt.
 
@psteimann: ein "=" ist eine Zuweisung, zwei "==" sind ein Vergleich.
Am Besten ist es aber, anstatt zwei Gleichheitszeichen drei zu verwenden und somit einen strikten Vergleich durchzuführen (ohne Typenumwandlung). Ansonsten führt das nämlich zu seltsamen Ergebnissen:
PHP:
0 == 0  //true
'' == '0'  //false
0 == ''  //true
0 == '0'  //true

//richtig:
0 === 0  //true
'' === '0'  //false
0 === ''  //false
0 === '0'  //false
 
Nicht ganz. Eine Zuweisung gibt einfach den Wert der Zuweisung zurück. Deswegen kann man die auch verketten:
Code:
var a, b;
a = b = 2;
Wenn also bei der Zuweisung irgendwas zugewiesen wird, was als "truthy" interpretiert wird, wird der if-Zweig ausgeführt.

Wenn nicht zugewiesen werden konnte, kommt entweder ein JS-Fehler oder es wird ignoriert und trotzdem der rechte Wert der Zuweisung ausgewertet.
 
Zurück
Oben