bjnas: href und return im Link

Hallo Fachleute

Mein Problem :

Möchte eine Homepage realisieren die mit Links wie
<a href="Link.." onclick="return change('s1');">Startseite</a>
aufgebaut sind. Mit Change wird ein HTML Request ausgelöst und bei Erfolg False zurückgegeben, also der href sollte nicht ausgelöst werden. Wenn nicht wird die Seite über PHP geladen.

Jetzt versuchte ich mehrere Varianten.

href="#id=s1" funktioniert
href="index.php?id=s1" href wird ausgelöst
href="http://www.beispiel.was" href wird ausgelöst

Wieso befolgen einige href's den return vom Javascript und einige nicht ? Und wo finde ich die korrekten Regeln für dieses Verhalten.

Danke für Hilfe

Bruno

  1. Vielleicht wäre die change-Funktion eine sinnvolle Lektüre für jene Leser gewesen, die versuchen wollen, Dir zu helfen. Wenn innerhalb des onclick-Events "return false;" steht wird der Link üblicherweise nicht angesprungen - es sei denn, im davorstehenden JS-Code ist ein Fehler.

    Ich würde Dir mangels Code empfehlen, mal die Fehlerkonsole zu öffnen und nachzusehen, ob Dir irgendwo ein Fehler einen Strich durch die Rechnung macht.

    Gruß, LX

    --
    RFC 1925, Satz 8: Es ist komplizierter als man denkt.
    1. Hei

      Danke für Deine Antwort, Konsole zeigt keine Fehler. Versuchte den return abzufangen mit alert(change('s1'));. Erhalte ein "undefined".

      Wenn der Code Fehler hat, wieso funktioniert er dann mit href"#" ? So wird der Link nicht ausgelöst nur der Request.

      ??

      Gruss Bruno

      1. Bei "#" wird die Seite generell nicht neu geladen. Deine Funktion hat also keinen Fehler, sondern gibt immer nur "undefined" zurück.

        Wenn Du Hilfe bei der Fehlersuche benötigst, würde ich Dir noch einmal empfehlen, den Code der Funktion hier zu posten.

        Gruß, LX

        --
        RFC 1925, Satz 8: Es ist komplizierter als man denkt.
        1. Bei "#" wird die Seite generell nicht neu geladen. Deine Funktion hat also keinen Fehler, sondern gibt immer nur "undefined" zurück.

          Wenn Du Hilfe bei der Fehlersuche benötigst, würde ich Dir noch einmal empfehlen, den Code der Funktion hier zu posten.

          Gruß, LX

          Hier die Funktion

          function change(hs){  
          			var xmlHttp = null;  
          			// Mozilla, Opera, Safari sowie Internet Explorer 7  
          			if (typeof XMLHttpRequest != 'undefined') {  
          				xmlHttp = new XMLHttpRequest();  
          			}  
          			if (!xmlHttp) {  
          				// Fehlerbehandlung für IE5+6  
          				try {  
          					xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");  //IE5  
          				} catch(e) {  
          					try {  
          						xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");  //IE6  
          					} catch(e) { }  
          				}  
          			}  
            
          			// Wenn das Objekt erfolgreich erzeugt wurde  
          			if (!xmlHttp) {  
          			     //alert("Kann keine XMLHTTP-Instanz erzeugen");  
          			     return 'true';  
                      }else{  
          				var url = "change.php";  
          				xmlHttp.open("POST", url, true);  
                          xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  
          				xmlHttp.onreadystatechange = function () {  
          				    //alert (xmlHttp.readyState);  
          					if (xmlHttp.readyState == 4 && xmlHttp.status == 200 ) {  
          					   if (document.getElementById('txt')) {  
          						  document.getElementById('txt').innerHTML = xmlHttp.responseText;  
          						  return false;  
          						}else{  
                                    return true;  
                                  }  
          					}  
          				};  
          				xmlHttp.send('hs='+hs);  
          			}  
          		}
          

          Danke für die Mühe

          Bruno

          1. Jetzt hab ich den Fehler.

            An's Ende der Funktion ein return false und schon funktionierts.

            Weiss jetzt nicht warum die Funktion nicht verlassen wird nah document.getElementById('txt').innerHTML = xmlHttp.responseText;.

            Aber jetzt geht es.

            Bruno

  2. Hallo,

    ich vermute, dass du nicht "false" zurückgibst. einen nicht-vorhandenen anker anzuspringen "#..." "funktioniert" "natürlich".

    vielleicht hilft ja: onclick="alert(return deinefunktion())";

    Gruß

    jobo