doppelte indexOf() abfrage
AlexanderH
- javascript
1 Cheatah0 AlexanderH1 ChrisB0 Struppi
0 Struppi
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?
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
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.
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
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] = 2Number [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.
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?
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
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
Doch wenn ich dann ein zweites mal den Suchbegriff auswerten will klappt dies nicht mehr.
"Klappt nicht mehr" - heißt?
Struppi.