Suche ein bestimmtes Javascript

hallo liebe wer-weiss-was-communtiy!

bisher hab ich IMMER eine antwort gefunden wenn ich dieses forum betreten habe.
jetzt hab ich ne frage, die ihr sicher beantworten könnt.
ich suche ein javascript zur erleichterung meines PHP-Programms.
da ich von js relativ wenig ahnung habe, würde es viel zu lange dauern bis ich mich da reingedacht habe. das projekt hat nämlich einen festen auslierungstermin.

ich habe ein selektierfeld ( … ) indem wenns hoch kommt tausende werte stehen können. ihr könnt euch vorstellen, nicht grad übersichtlich. deshalb habe ich drunter ein eingabefeld. dieses soll bereits während der eingabe die informationen aus sich auslesen und den ersten wert im selektierfeld, indem die eingabe vorkommt, automatisch markieren.

beispiel:

werte in der box:
Meier
Müller
Neumann
Zentgraf

eingabe im eingabefeld: „m“
die markierung in der box springt zu Meier

eingabe im eingabefeld: „mü“
die markierung in der box springt zu Müller

eingabe im eingabefeld: „z“
die markierung in der box springt zu Zentgraf

eingabe im eingabefeld: „zy“
keine werte in der box --> keine änderung der markierung

sowas kann man ja universell prgrammieren. gibt ja nur 2 variablen die sich ändern können (die bezeichnungen der box und des eingabefeldes)

hat jemand so ein script?
bitte helft mir

danke

Hallo Stefan,

dann wollen wir mal versuchen Dich auch diesesmal nicht zu enttäuschen :wink:

Ist es vielleicht so etwas, was Du suchst?

Test
var oldSel = „“;

function mark_sel( boxname, valobj )
{
var selbox = document.getElementById( boxname );
var txtbox = document.getElementById( valobj );
var selval = txtbox.value;
var regx = new RegExp( „^“ + oldSel );
var Found = 0;
var srchstr = „“;
var i = 0;

if ( strOldSel == selval )
return;

if ( -1 == selval.search( regx ) )
st_idx = 0;
else
st_idx = selbox.selectedIndex;

regx = new RegExp( „^“ + selval );
for ( i = st_idx ; ( i < selbox.length ) && ( 0 == Found ) ; i++ )
{
srchstr = selbox.options[i].text;
if ( -1 != srchstr.search( regx ) )
{
Found = 1;
selbox.selectedIndex = i;
}
}
oldSel = selval;
}

AdamEvaEvalotteFrankHeinrichMartinPaulaZacharias

Auswahl: 

Wichtig ist halt, dass die Select-Box und das Textfeld über eine ID verfügen, denn nur die ist über die ganze Seite wirklich eindeutig.

Gruß
Volkmar

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Volkmar,

ich könnt dich drücken :smiley:
genau danach habe ich gesucht. da haste bestimmt einige zeit dran gesessen…

ich hab zwar ein fehler gefunden (strOldSel ist nicht definiert), konnte ihn aber beheben (du hast dich nur verschrieben: die variable heißt oldSel). aber das ist verständlich :smile:

nochmals vielen, vielen dank

achja, noch eine frage:
da mit groß/kleinschreibung nicht wichtig ist (eigentlich ist es störend, weil ich drauf achten muss), würd ichs gern abschalten.
bei selfhtml hab ich in erfahrung bringen können, dass man beim erzeugen des regulären ausdrucks mitfilfe von „/i“ das hinbekommen kann. ich habs mal versucht:
var regx = new RegExp( „^“ + oldSel + „/i“ );
aber es funktioniert nicht. wie müsste das lauten?

MfG
Stefan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Stefan,

genau danach habe ich gesucht. da haste bestimmt einige zeit
dran gesessen…

fein, das freut mich und es hat etwa 20 Minuten gedauert.

ich hab zwar ein fehler gefunden (strOldSel ist nicht
definiert), konnte ihn aber beheben (du hast dich nur
verschrieben: die variable heißt oldSel). aber das ist
verständlich :smile:

das eine „strOldSel“ habe ich wohl übersehen. Ich weiß gerne welchen Typ eine Variable hat (soweit das bei JS geht :smile: und habe nachher wieder ausgebaut, um nicht zu penibel zu erscheinen.

nochmals vielen, vielen dank

Gerne!

achja, noch eine frage:
da mit groß/kleinschreibung nicht wichtig ist (eigentlich ist
es störend, weil ich drauf achten muss), würd ichs gern
abschalten.
bei selfhtml hab ich in erfahrung bringen können, dass man
beim erzeugen des regulären ausdrucks mitfilfe von „/i“ das
hinbekommen kann. ich habs mal versucht:
var regx = new RegExp( „^“ + oldSel + „/i“ );
aber es funktioniert nicht. wie müsste das lauten?

Das mit dem regulären Ausdruck geht, wenn Du die Option als zweiten Parameter übergibst also

regx = new RegExp( „^“ + selval, „i“ );

Gruß
Volkmar

Hallo Stefan,

ich habe ein selektierfeld ( …
) indem wenns hoch kommt tausende werte stehen
können. ihr könnt euch vorstellen, nicht grad übersichtlich.
deshalb habe ich drunter ein eingabefeld. dieses soll bereits
während der eingabe die informationen aus sich auslesen und
den ersten wert im selektierfeld, indem die eingabe vorkommt,
automatisch markieren.

Nachdem ich Volkmars Beispiel voller Freude auch zum
Laufen brachte und *genau sowas* schon lange ängstlich
vor mir her schiebe :wink: hab ich den heutigen Nachmittag
neben Kaffeetrinken dafür verwendet.

Ich habe versucht, Volkmars Beispiel so zu erweitern,
dass man das select-Element auch dynamisch auffüllen
kann, das geschieht dadurch, dass alle Namen/Werte
in einem Javascript-Array stehen welches z.B. aus
PHP (oder bei mir SSI=>CGI/Perl) kommt.

der Head-bereich sähe dann so ausSelections

var allnames = new Array(
<!–#include virtual="/cgi-bin/fetch?link=http://xsw.terminator.net/tools/univrand/names.txt&m…" -->
);

function ClearSelectById(selectid) {
var list = document.getElementById( selectid );
for(var i=list.length; i>=0; i-- ) { list[i] = null; }
}

function PopulateSelectById(selectid, namelist) {
var list = document.getElementById( selectid );
for(var i=0; i<namelist.length; i++) {
list[list.length] = new Option( namelist[i], i+1 );
}
}

function OptIndexByRegex(list, regex) {
for(var i=0; i<list.length; i++ ) {
if( -1 != list.options[i].text.search( regex ) )
return i;
}
return -1
}

function JumpSelectById(selectid, textinputid) {
var text = document.getElementById( textinputid );
if( text.value.length != 0 ) {
var list = document.getElementById( selectid );
var indx = OptIndexByRegex( list, new RegExp( „^“ + text.value, „i“ ) );
if( indx != -1 ) list.selectedIndex = indx
}
}

window.onload = function(){ ClearSelectById(‚myselect‘); PopulateSelectById(‚myselect‘,allnames) }

Die Array-Elemente (Namen) kämen dann (bei mir)
aus einer Textliste durch SSI-Aufruf bzw. (bei Dir)
über PHP und sehen so aus:

 "name1", "name2", "name3", "name4",
 ...
 "name862", "name863", "name864"

(hinten kein Komma mehr!)

Anstatt body onload=""> verwendet
man heute (imho) eher das

 window.onload = ... ; 

im Head.

Der zugehörige Body sähe dann so aus:

Auswahl:

Ich habe im wesentlichen auf Volkmars know-how
zurückgegriffen, das Ganze dann etwas „gestrafft“ und
„modernisiert“ (mit Sicherheit mehr als 20 min
gebraucht) - und dabei viel gelernt :wink:

Grüße & Dank auch an Volkmar

CMБ