webForumDet fria alternativet

Markera i selectlista det som skrivs i en textbox?

6 svar · 214 visningar · startad av solbulle

solbulleMedlem sedan mars 20015 287 inlägg
#1

Jag har nu min lilla funktion som kollar att man inte fyllt i samma namn som redan finns i en selectlista. (Så att det inte läggs in dubletter i db.)
Kom på att det är lite trist att bara få sig en alert i ansiktet, behöva radera det man skrivit in o sen välja namnet i selecten.
Så mina frågor lyder:

* Kan jag med en modifiering av min kod kolla i precis vilket fält matchningen fanns?

* Kan jag på något sätt automatiskt välja samma val i min seleclista i stället? (Selectlistan i sin tur byggs upp av arrayen som skickas som argument till funktionen)

* Kan jag kanske skippa att få upp en alert men på något sätt, kanske i ett dolt fält, notera matchningen och på sidan som tar emot detta notera vem man valde men då inte lägga in densamme. (~variant av förra frågan iofs...)

Gnugga nu tankeknölkarna gott folk. :)

function chkUnique(arrStringArray) {

	for (var p = 0; p < lists.length; p++) {

		strfirstfield = "document.myform.firstname"+lists[p]+".value";
		strlasstfield = "document.myform.lastname"+lists[p]+".value";
		strNewfield = eval(strfirstfield)+" "+eval(strlasstfield);

	for (var t = 1; t < arrStringArray.length; t+=2) {

		if (arrStringArray[t].toUpperCase() == strNewfield.toUpperCase()) { alert(arrStringArray[t]+' finns redan inlagd!\nVälj '+arrStringArray[t]+' i selectlistan.');
}
		}
	}
}
</script>
JojoxxMedlem sedan juni 20004 308 inlägg
#2

Kanske så här?

<script language="JavaScript" type="text/javascript">
function checkDup(obj,listobj){
	for(var i=0;i<listobj.length;i++){
		if(listobj[i].value.toLowerCase()==obj.value.toLowerCase()){
			listobj.selectedIndex=i; obj.value="";
		}
	}
}
</script>

<form>
<input type="text" name="fritextnamn" onchange="checkDup(this,this.form.listnamn);"><br>
<select name="listnamn">
<option value="Adam">Adam</option>
<option value="Bertil">Bertil</option>
<option value="Cesar">Cesar</option>
</select>
</form>
solbulleMedlem sedan mars 20015 287 inlägg
#3

Det var ett snabbt gnuggande. :)

För att göra det hela lite krångligare så har jag två textboxar (för o efternamn) samt att jag har inte namnet i value på selecten, bara ett id. Däremot har jag för samt efternamn i "texten" på selecten, (eller vad det nu heter)

Går det att manipulera skriptet tro?

r/ eller vad säger jag nu egentligen... låt mig fundera lite innan jag kommer här o muttrar...

JojoxxMedlem sedan juni 20004 308 inlägg
#4

Nu hänger jag inte riktigt med... Bara för att det finns någon som heter Adam och någon som heter Adamsson behöver det ju inte finnas någon som heter Adam Adamsson.... Men vi kodar ändå :)

<script language="JavaScript" type="text/javascript">
function checkDup(obj,listobj,elistobj){
	var found=new Object();
	for(var i=0;i<listobj.length;i++){
		if(listobj[i].text.toLowerCase()==obj.value.split(" ")[0].toLowerCase()){
			found.first=i;
		}
	}
	if(obj.value.split(" ")[1]){
		for(var i=0;i<elistobj.length;i++){
			if(elistobj[i].text.toLowerCase()==obj.value.split(" ")[1].toLowerCase()){
				found.last=i;
			}
		}
	}
	if(found.first>=0&&found.last>=0){
		listobj.selectedIndex=found.first;
		elistobj.selectedIndex=found.last;
		obj.value="";
	}	
}
</script>

<form>
<input type="text" name="fritextnamn" onchange="checkDup(this,this.form.listnamn,this.form.listefternamn);"><br>
<select name="listnamn">
<option>Adam</option>
<option>Bertil</option>
<option>Cesar</option>
</select>
<select name="listefternamn">
<option>Adamsson</option>
<option>Bertilsson</option>
<option>Cesarsson</option>
</select>
</form>
solbulleMedlem sedan mars 20015 287 inlägg
#5

Bug och bock, men jag tror jag uttrykte mig oklart.
I min db har jag namn på folk (o här får ingen ha sin namne) förnamn o efternamn separerade.
Dessa har ett ID, det är detta som står som value i min selectlista, som "val" eller vad man ska kalla det står för + efternamn.

Men men, jag gjorde en kombination av din första kod med min och det fungerar nästan:

function chkUnique(arrStringArray) {

	for (var p = 0; p < lists.length; p++) {

		strfirstfield = "document.myform.firstname"+lists[p]+".value";
		strlasstfield = "document.myform.lastname"+lists[p]+".value";
		strNewfield = eval(strfirstfield)+" "+eval(strlasstfield);

	for (var t = 1; t < arrStringArray.length; t+=2) {

		if (arrStringArray[t].toUpperCase() == strNewfield.toUpperCase()) { alert(arrStringArray[t]+' finns redan inlagd!\nVälj '+arrStringArray[t]+' i selectlistan.');
		document.forms['addform'].elements[lists[p]].selectedIndex = t/2;

}
		}
	}
}
</script>

Det spricker däremot när jag försöker "nolla" textfältet med:

		document.forms['addform'].elements[lists[p]].selectedIndex = t/2;  document.myform.firstname"+lists[p]+".value="";

Jag tycker mig ha testa lite alla möjliga varianter att "haka" på... resultatet blir att formuläret skickas.
r/ Måste tillägga att det var ett kaxigt script du fick till dock. :)
r2/ Att just detta inte fungerar fattar iofs jag med... :r , men hur får jag fatt i formulätrasket!

solbulleMedlem sedan mars 20015 287 inlägg
#6

Pga serverhaveri fick man ju ta tag i bitarna själv ;) och det löste sig efter lite kikande här o där, jag har gjort om skriptet ytterligare mot den version som synes här.
Just detta problem löste jag dock så enkelt som att jag gjorde som Jojoxx och tog med "this" som argument i funktionen och tömde det på samma sätt som han:
obj.value="";

JojoxxMedlem sedan juni 20004 308 inlägg
#7

Japp, nyckelordet this är kanon, bara man håller reda på vad det för tillfället syftar på :)

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)