AlexanderH: doppelte indexOf() abfrage

Mahlzeit Leute,

Ich würde gerne eine Suchfunktion verwenden die wenn im Eingabe Feld am Anfang "nummer" steht eine andere Funktion ausllöst als wenn nicht nummer am Anfang steht. Dies funktioniert auch beispielsweise mit einem alert.
Doch wenn ich dann ein zweites mal den Suchbegriff auswerten will klappt dies nicht mehr.

Script:
if(Item.indexOf("nummer") == 0)
 {
 if(Number[i].indexOf(item) != -1)
  {
  Found = true;
  ausgeben()
  }
 }

i ist weiter vorne deklariert

Wieso funktioniert das so nicht?

  1. Hi,

    if(Number[i].indexOf(item) != -1)
    Wieso funktioniert das so nicht?

    vermutlich hast Du mit "i" keine String-Eigenschaft des nativen Number-Objektes erreicht. Darüber hinaus darfst Du einen Aufsatz über das Thema schreiben, warum "funktioniert nicht" als Fehlerbeschreibung nicht funktioniert.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      also wenn ich "if(Number[i].indexOf(item) != -1)" einzeln verwende funktioniert die Ausgabe allerdings sobald die Abfrage if(Item.indexOf("nummer") == 0) vorsteht bleibt das Script an dieser Stelle stehen und gibt den Fehler (Number [...] Ist Null oder Kein Objekt)

      Ok jetzt mal ein größeres Stück aus dem Script:
          Number  = new Object();
          Keyword = new Object();

      Keyword[0] = 2
      Number [0] = 2

      Number [1] = "1"
      Keyword[1] = "Text1"

      Number [2] = "2"
      Keyword[2] = "Text2"

      for (var i=1; i <= Keyword[0]; i++)
        {
        if (document.form1.searchfor.value != "")
          {  if(Item.indexOf("nummer") == 0)
             {
                if(Number[i].indexOf(item) != -1)
                 {
                   Found = true;
                   ausgeben()
                 }
             }

      else
         {
             if(Number[i].indexOf(item) != -1)
             {
               Found = true;
               ausgeben()
             }
         }
      }

      <INPUT TYPE="text" NAME="searchfor" id="searchfor">

      wenn ich nun in das textfeld etwas eingebe ohne "nummer" an der ersten Stelle wird die funktion ausgeben() ausgeführt.

      Wenn ich aber in das textfeld "nummer 2" eingebe würd ich gerne dass die nummer 2 gefunden wird allerdings ist das nicht der Fall. Ich bekomme nur eine Fehlermeldung : 'Number[...]ist Null oder lein Objekt.

      1. Hi,

        worauf dich Cheatah mit

        vermutlich hast Du mit "i" keine String-Eigenschaft des nativen Number-Objektes erreicht.

        hinweisen wollte, ist, dass das

        Number  = new Object();

        sehr, sehr, sehr sehr sehr ungünstig ist - schliesslich ist Number einer der nativen Objekttypen von JavaScript. Number dann als Bezeichner für ein eigenes Objekt verwenden zu wollen, führt fast zwangsläufig zu Problemen.

        Wähle als einen anderen Bezeichner für dein eigenes Objekt.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
      2. Ok jetzt mal ein größeres Stück aus dem Script:
            Number  = new Object();

        Du weißt, dass http://de.selfhtml.org/javascript/objekte/number.htm@title=Number bereits existiert?

        Keyword = new Object();

        Keyword[0] = 2
        Number [0] = 2

        Number [1] = "1"
        Keyword[1] = "Text1"

        Number [2] = "2"
        Keyword[2] = "Text2"

        for (var i=1; i <= Keyword[0]; i++)

        ich versteh' den Sinn nicht? warum ist keyword[0] = 2? keyword heißt doch, dass es ein Wort ist. Warum sind keyword und Number Objekte? Du willst hier Arrays verwenden.

        if(Number[i].indexOf(item) != -1)

        Das ergibt auch keinen Sinn. Number[1] ist z.b. '1' und dann schaust du ob dort ein anderer String vorkommt? Der mindestens aus der Zeichenkette 'nummer' besteht, das heißt diese Bedingung trifft nie zu.

        Deine Beschreibung klingt so, als ob du einfach ein Array von Wörter haben willst, das mit einer Eingabe referenziert wird. Das ist doch einfach:

        var keyword =['', 'text1', 'text2', 'text3'];  
        var item = 'nummer 2';  
        if(item.indexOf('nummer') > -1) {  
        var idx = parseInt(item.substr(item.indexOf('nummer') + 6));  
        alert(keyword[idx])  
        }  
        
        

        Struppi.

        1. Du weißt, dass http://de.selfhtml.org/javascript/objekte/number.htm@title=Number bereits existiert?

          Wusste ich nicht, danke für den Hinweis habs geändert.

          Hab jetzt mal ne kleine Demo gestrickt:

            
          <html>  
          <script>  
            
              Numbers = new Object();  
              Keyword = new Object();  
            
          Numbers[0] = 2  
          Keyword[0] = 2  
            
          Numbers[1] = "35"  
          Keyword[1] = "das ist text 1"  
            
          Numbers[2] = "36"  
          Keyword[2] = "das ist text 2"  
            
            
          function checkit()  
          {  
                var Found = false  
                var Item = document.forms[0].searchfor.value.toLowerCase();  
            
          MsgBox = window.open ("","namewindow","")  
          MsgBox.document.write ("<head><title>Ergebnissausgabe</title></head>");  
          MsgBox.document.write ("<br><br>Suchergebnisse<br><br>")  
            
            for (var i=1; i <= Keyword[0]; i++)  
            {  
          	if (document.form1.searchfor.value != "")  
          	{	if(Keyword[i].indexOf(Item) != -1 || Item == Numbers[i])  
          		{	Found = true;  
          			MsgBox.document.write ("Nummer: " + Numbers[i]+"<br>Name: "+Keyword[i]+"<br><br>")  
          		}  
          	}  
          }  
            
               if(!Found)  
          MsgBox.document.write ("<br><br>Die Suchanfrage erzielte keine Ergebnisse<br><br>")  
          MsgBox.document.write ("<br><br>Ende")  
          }  
            
            
            
            
            
          function checkit2()  
          {  
                var Found = false  
                var Item = document.forms[0].searchfor.value.toLowerCase();  
            
          MsgBox = window.open ("","namewindow","")  
          MsgBox.document.write ("<head><title>Ergebnissausgabe</title></head>");  
          MsgBox.document.write ("<br><br>Suchergebnisse<br><br>")  
            
          // Anfang wichtiger Bereich  
            
            for (var i=1; i <= Keyword[0]; i++)  
            {  
          	if (document.form1.searchfor.value != "")  
          		if(Item.indexOf("nummer") == 0)  
          		{  
          			if(Numbers[i].indexOf(item) != -1)  
          			{  
          				Found = true;  
          				MsgBox.document.write ("Nummer: " + Numbers[i]+"<br>Name: "+Keyword[i]+"<br><br>")  
          			}  
          		}  
          	else  
          	{  
          		if(Keyword[i].indexOf(item) != -1)  
          		{  
          			Found = true;  
          			MsgBox.document.write ("Nummer: " + Numbers[i]+"<br>Name: "+Keyword[i]+"<br><br>")  
          		}  
          	}  
            
          }  
            
          //    Ende wichtiger Bereich  
            
               if(!Found)  
          MsgBox.document.write ("<br><br>Die Suchanfrage erzielte keine Ergebnisse<br><br>")  
          MsgBox.document.write ("<br><br>Ende")  
          }  
          </script>  
            
          <FORM NAME="form1" action="javascript:return;">  
          <center>  
          <INPUT TYPE="text" NAME="searchfor" id="searchfor">  
          <input Type="button" id="knopf" onclick="checkit()" value="ohne">  
          <input Type="button" id="knopf2" onclick="checkit2()" value="mit">  
          </center>  
          </FORM>  
          </html>
          

          Wenn man dies in eine HTML einfügt bekommt man ein Eingabe Feld und 2 Buttons. "ohne" Soll die gewünschte Ausgabe demonstrieren.
          "mit" ist die neue Funktion welche ich nicht zum laufen bekomme.

          Der Scriptfehler ist jetzt weg allerdings werden keine werte ausgegeben.
          Hat jemand eine Idee?

          1. Hi,

            Der Scriptfehler ist jetzt weg

            Das liegt an der Ausgabe in einem Popup.
            Selbst wenn ich ein debugger-Statement in deinen Code einbaue, lande ich im Firebug nicht dort, wenn ich zuvor das Popup öffnen lasse. Der Wechsel des Fensterkontextes verträgt sich wohl nicht so gut mit diesem Debugging-Ansatz.

            
            > function checkit2()  
            > {  
            >       //...  
            > 	if (document.form1.searchfor.value != "")  
            > 		if(Item.indexOf("nummer") == 0)  
            > 		{  
            > 			if(Numbers[i].indexOf(item) != -1)
            
            

            Error: item is not defined

            Ergo: Scriptabbruch.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
          2. Hi,

            if (document.form1.searchfor.value != "")
            if(Item.indexOf("nummer") == 0)
            {

            [...]

              }  
            

            else

            Deine Einrückung sugerriert, daß das else zu dem if (document.form1.searchfor.value != "") gehört.
            Tut es aber nicht - es gehört zu if(Item.indexOf("nummer") == 0).

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Doch wenn ich dann ein zweites mal den Suchbegriff auswerten will klappt dies nicht mehr.

    "Klappt nicht mehr" - heißt?

    Struppi.