[JavaScript] Problem: onkeyup mit xajax im IE

Dieses Thema im Forum "Webentwicklung" wurde erstellt von SinErgy, 25. November 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 25. November 2008
    Problem: onkeyup mit xajax im IE

    Moin Leute,

    ich habe mir heute auf der Arbeit fast nen Ast abgebrochen und konnte die Ursache für folgendes Problem nicht finden:

    es handelt sich um einen teil aus einem eigens geschriebenen autosuggest / autocomplete

    PHP:
          $results1  .=  "<div class='searchheader'>Suchergebnis</div>" ;
          
    // HIER DAS SELECT STATEMENT SQL
          
    $i = 0 ;
          while(
    $r  $db -> fetch_row ()) {  // $db ist mein Datenbank-Objekt mit eigenen Methoden etc
            
    $nr  preg_replace ( "/(.*)( $value )(.*)/i" "$1<b>$2</b>$3" $r [ 'nr' ]);
        
    $name  preg_replace ( "/(.*)( $value )(.*)/i" "$1<b>$2</b>$3" $r [ 'name' ]); 
     
    // $result2 ist nicht formschön, aber muss für das innerHTML in eine durchgehende zeile geschrieben werden und ich war zu faul jeden teil einzeln an $result2 zu hängen
            
    $results2  .=  "<div class='result' style='float:none'><div id='resultrow $i ' onmouseout='change_selection(\"resultrow $i \",false,\"\");' onmouseover='change_selection(\"resultrow $i \",true,\"\"); push_leiharbeiter(\"" . $r [ 'name' ]. "\",\"" . $r [ 'id' ]. "\");'><table width='100%'><tr><td width='10px'><img src='/versions/styles/recordsearch/icon.gif' border='0' /></td><td width='20%'>" . $nr . "</td><td width='50%'>" . $name . "</td><td>" . $r [ 'plz' ]. " " . $r [ 'ort' ]. "</td></tr></table></div></div>" ;
            
            
    $i ++;
          }
          
    $results3  .=  "<div class='searchfooter'>Anzahl Ergebnisse:  $i </div>" ;
          
          
    $results  $results1 . $results2 . $results3 ;
          
    // ein entsprechends DIV mit id=recordsearch_two wurde zuvor erzeugt per DOM
          
    $script  .=  'var layer = document.getElementById("recordsearch_two"); 
                          layer.innerHTML = "'
    . str_replace ( "'" , "\'" , $results ). '";
                          layer.style.display = "inline";
                          document.body.replaceChild(layer);'
    ;
    Funktionsweise: in ein Feld wird ein Suchbegriff eingetragen. Nach jedem "onkeyup" wird this.value an ein xajax-Script geschickt, wo die DB nach den entsprechenden Einträgen durchsucht wird. Die Ergebnisse werden nach obigen Snippet zusammengebaut und ausgegeben.

    Im Firefox funktionierte dies einwandfrei.

    Im IE trat folgender Fehler auf:
    Taste "f" wurde gedrückt -> Event onkeyup wurde gestartet.
    Taste s wurde gedrückt -> Event onkeyup wurde nicht gestartet.
    Tasten s+p wurden gedrückt -> Event onkeyup wurde gestartet.

    D.h. mal reagierte die Funktion auf das Event, mal nicht...
    Testweise habe ich dann $result2 rausgenommen. Die Anzeige des Header-Divs und Footer-Divs wurde dann korrekt angezeigt (natürlich ohne Ergebnisse) und reagierte nach jedem getippten Buchstaben.
    Danach habe ich
    PHP:
    $result2  .=  $r [ 'name' ]. "<br />" ;
    so gesetzt, da ich vllt dachte dass die vielen escapten Zeichen usw Probleme machen.
    Allerdings ohne Erfolg... selbiges Problem.


    Weiß jemand woran das liegen könnte?

    Umlaute und Sonderzeichen bei der Ausgabe aus der DB wurden ausgeschlossen.
     
  2. 26. November 2008
    AW: Problem: onkeyup mit xajax im IE

    der javascript-teil wär interessanter, vorallem weil das wohl der fehler liegt...

    doctype gesetzt?
    xhtml?
    quirks-mode?
    welche ie-version?
     
  3. 26. November 2008
    AW: Problem: onkeyup mit xajax im IE

    Probier mal auch "onkeydown" und "onkeypress" zusätzlich als event einzusetzen.
    Dann müsste es eigentlich 100% funktionieren.

    MFG Ralphwiggum
     
  4. 27. November 2008
    AW: Problem: onkeyup mit xajax im IE

    doctype wurde gesetzt.
    xhtml wurde gesetzt.

    quirks-mode sollte deaktiviert sein im ie über <meta> tag

    ie-version 7.0.6xxx

    der restliche javascript-teil sind vllt 5 zeilen um ein div-container zu erstellen und als kindknoten anzufügen. + style angaben. damit dürfte es dort keine probleme geben.

    danke für den tipp, hatte ich allerdings schon versucht. sowohl einzeln als auch zusammen, problem besteht weiterhin...

    der fehler liegt in der zeile:
    PHP:
    layer . innerHTML  "'.str_replace("'","\'",$results).'";
    ich habe einen workaround noch gebaut, indem ich stattdessen setze:
    PHP:
    layer . innerHTML  "<div id='replace'></div>" ;
    und dann per xajax->assign das div dort mit meinen inhalten ersetze...

    das assign macht ja im grunde nix anderes als nen innerhtml setzen.
    damit funktioniert es komischerweise.

    Wäre halt nur interessant zu wissen, warum das eine nicht geht, jedoch das andere.
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.