Autovervollständigen klappt nicht im Firefox

milea

Mitglied
Hallo!

Ich habe hier ein Script, das ein Array nach Begriffen durchsucht in denen der im Suchfenster eingegebene String enthalten ist. Diese sollen dann als Auswahloptionen angezeigt werden.

Ich muß noch zugeben, dass ich das script nicht selbst geschrieben hab, denn so ganz von allein komm ich auf sowas noch nicht :) Allerdings bin ich nicht völlig unwissend in JS und versteh schon, was dort passiert.

naja, jedenfalls Funktioniert das script so wie es soll - allerdings nur im IE nicht im Firefox. Werden da irgendwelche spezifischen microsoft -JSMethoden verwendet? Oder was ist sonst der Grund? Danke schonmal für eure Hilfe!

Code des Formulars
HTML:
<form name="suche" onSubmit="return Durchsuchen(this.string.value);">
<input name="string" id="eingabe" type="text" size=40 value="Bitte Suchbegriff eingeben" onKeyUp="startAutoComplete(this);" onChange="n=0;" onfocus="if(this.value==this.value)this.value=''">
<br>
 <select size="1" style="width:400px" name="matches" id="matches" onchange="document.search.string.value=this.value">
<option selected="selected" >---Auswahlmöglichkeiten---</option>
</select>
<input type="submit" value="SUCHEN">
</form>

JS code:
PHP:
function startAutoComplete(textfeld)
{
  if(!self.event || String.fromCharCode(event.keyCode).search(/[\w\-0-9\.,]/) == -1){
    return;
  }
  tempname = textfeld.value.toLowerCase();

  var results = new Array();

  for(i=0; i<begriffe.length; i++){
 if(begriffe[i].toLowerCase().search(new RegExp(tempname)) != -1)
        {
   results.push(begriffe[i]);
 }
  }
  addResults(results);
  deleteResults();

}



function deleteResults()
{
  var y = document.search.matches.length;
  for(var x=0; x<y; x++){
    document.search.matches.options[1] = null;
  }
}


function addResults(res){
  for(var x=0; x<res.length; x++){
    result = new Option(res[x],res[x],false,false);
    document.search.matches.options[document.search.matches.options.length] = result;

  }

}
 
Hi!

event.keyCode ist ein Microsoft-Konstrukt dass nur wenige Browser übernommen haben. Alternativ ist event.which, allerdings unterscheiden sich die Werte mitunter. Vergleiche hierzu die Abschnitte auf de.selfhtml.org.
Solange es sich allerdings nur um Buchstaben und Zahlen handelt, sollte das keine Probleme bereiten:
Javascript:
function startAutoComplete(textfeld)
{
  if(!self.event || String.fromCharCode(event.keyCode || event.which).search(/[\w\-0-9\.,]/) == -1){
    return;
  }
  tempname = textfeld.value.toLowerCase();

  var results = new Array();

  for(i=0; i<begriffe.length; i++){
 if(begriffe[i].toLowerCase().search(new RegExp(tempname)) != -1)
        {
   results.push(begriffe[i]);
 }
  }
  addResults(results);
  deleteResults();
}

Gruß
Enum
 
Danke schonmal enum.
Aber leider geht es jetzt immer noch nicht.
Wieso hast du eigentlich was an meinen regulären Ausdrücken geändert? Da kommt dann nämlich ein Syntaxfehler raus.
 
Hi!

Ich hab nix' an Deinen Ausdrücken geändert. Das ist die Syntax-Highlighting Funktion hier im Forum, die Spinnt. Das Pipe- und das Größer-Als-Zeichen sind nicht von mir, ich schwöre es! :p Passiert immer wieder wenn man RegExes in HIGHLIGHT-Blöcken unterbringt. Warum es immer noch nicht geht kann ich nicht sagen ohne den gesamten Code gesehen zu haben. Was z.B. ist document.search.matches ?

Gruß
Enum
 
hm, sorry hab grad gesehen, dass ich dem Formular vorübergehend nen flaschen Namen gegeben hatte:
Statt "suche" heißt es "search" und das "matches" kommt vom Select-Feld, in dem dann die Suchergebnisse, die den String enthalten hineingeschrieben werden.
deshalb document.search.matches.options

Aber ich hab das wieder geändert. Es lang aber nicht daran. Mittlerweile denke ich das der Fehler in dieser Zeile liegen müsste, da er immer nur bis dahin kommt und nicht weiter.

Code:
 if(!self.event || String.fromCharCode(event.keyCode || event.which).search(/[\w\-0-9\.,]/) == -1){
    return;
 
Moin,

Das Problem ist jenes:

Code:
if(!self.event

Dort wird versucht, auf ein globales Event-Objekt zuzugreifen.
Dieses existiert jedoch nur im Internet-Explorer....andere Browser verlassen bereits hier die Funktion.

In anderen Browsern musst du der Funktion den Event als Argument übergeben.

Die nötigen Änderungen:

Alt:
Code:
function startAutoComplete(textfeld)
{
  if(!self.event || String.fromCharCode(event.keyCode || event.which).search(/[\w\-0-9\.,]/) == -1){
    return;
  }

Neu:
Code:
function startAutoComplete(e)
{
  if(String.fromCharCode(e.keyCode || e.which).search(/[\w\-0-9\.,]/) == -1)
  {
    return;
  }
  textfeld=(e.target || e.srcElement);
(der Rest der Funktion kann bleiben, wie er ist).

Neuer Funktionsaufruf:
Code:
onKeyUp="startAutoComplete(event);"
 

Neue Beiträge

Zurück