webForumDet fria alternativet

jquery, fylla i input fält i annat formulär

JavaScript

12 svar · 716 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Frågan#1

Jag har en sida som består av ett antal olika formulär

det första formuläret har 2 st dropdown boxar, vi kallar dem "box1" och "box2"

i övriga formulär så har jag i varje formulär en gömd input som heter "boxes", samma namn i alla de övrig formulären.

Denna gömda input "boxes" vill jag fylla med värdena från båda boxarna "box1" och "box2", dvs boxes.value=box1+box2 när man ändrar vardet i någon av dessa 2 dropdown boxar.

Hur kan jag göra detta med t ex jquery?
Jag har bara namnet på första formuläret och jag behöver dessutom ta bort delar från båda dropdownerna så att nedanstående exempel skulle kunna generera följande resultat i boxarna "boxes": 123fighters

<form id="ett" name="ett">
    <select id="box1" name="box1">
        <option>abc_123</option>
        <option>abc_456</option>
    </select>
    <select id="box2" name="box2">
        <option>abc_foo</option>
        <option>abc_fighters</option>
    </select>
</form>
<form>
    <input type="hidden" value="" id="boxes" name="boxes" />
    //....
</form>
<form>
    <input type="hidden" value="" id="boxes" name="boxes" />
    //....
</form>
<form>
    <input type="hidden" value="" id="boxes" name="boxes" />
    //....
</form>
<form>
    <input type="hidden" value="" id="boxes" name="boxes" />
    //....
</form>

några idéer på hur man löser det?

Medlem sedan juni 20019 519 inlägg
#2

Nu så är detta inte riktigt html du skickar men bara ett tips är att id="boxes" kommer inte fungera ;)

Men skall alla hidden element få samma värde som box1+box2 har?

		$("select").change(function() {
			var value = "";
			$("select").each(function() {
				value+=this.value.split("_")[1]; //xxx_yyy only get 'yyy'
			});
			$("input[name='boxes']").each(function(){
				this.value=value;
			});
		});

?
Eller klonar du första form blocket?

Medlem sedan jan. 20013 341 inlägg
#3

Jag har en loop som sätter namnet i stil boxes_{uniquerow} och behöver bara ändra då till $("input[name*='boxes_']") gissar jag

Men ett annat problem, första dropdownen innehåller 2 poster bara ena med ett värde och andra är tomt, vilket ger mig undefined, hur kommer jag runt det?

En annan sak, hur kan jag även få det här att hända på sidans första laddning?

Medlem sedan juni 20019 519 inlägg
#4

sätt även samma kod som skall köras vid load(), eller triggar change() eventet på dina select vid onload. vad skall hända om det ena värdet är tomt? skall den köra skriptet ändå?

Är det något i stil med:
http://voigt.se/sandbox/wf/aleborg/select.html
Där input boxarna är hidden, mest för visuellt nu.

Medlem sedan jan. 20013 341 inlägg
#5

nästan :)
mer som

    <select id="box1" name="box1">
        <option value="123">abc_123</option>
        <option value="">abc_</option>
    </select>
    <select id="box2" name="box2">
        <option>abc_foo</option>
        <option>abc_fighters</option>
    </select>

så om första valet i båda väljs så ska det bli 123foo, om andra valet samt första väljs så ska det bli foo endast, så även om value är tomt så ska det bli action.
Tittar man till verkligheten så står det:

    <select id="box1" name="box1">
        <option value="www.">http://www.</option>
        <option value="">http://</option>
    </select>
    <select id="box2" name="box2">
        <option value="">-- Välj domän --</option>
        <option value="CsWebSiteLinux|mydomain1.se">mydomain1.se</option>
        <option value="CsWebSiteLinux|mydomain2.se">mydomain2.se</option>
        <option value="CsWebSiteWindows|mydomain3.se">mydomain3.se</option>
        //...
    </select>

vilket ska ge mydomainX.se eller https://www.mydomainX.se i en inputbox som heter selecteddomain_{unique ident} :)
Samma kodd ska köras vid load MEN det kan finnas risk att inga fler formulär finns då, beroende på antal domäner det finns i listan

Medlem sedan juni 20019 519 inlägg
#6

Jag fattar inte (jag som är trög), skall alla input med namnet "selecteddomain_*" (ett par st?) få samma värde när man gör ett val i sin select?

Ditt exemepel med domäner, vad skall värdet vara vid en load? "www." ?

Medlem sedan jan. 20013 341 inlägg
#7

Du är rätt ute här: http://voigt.se/sandbox/wf/aleborg/select.html
Men ett av värdena kan vara tomt i första selecten och ja, www ska vara standard. Alla input med namnet "selecteddomain_*" (ett par st) ska få samma värde, det värdet från de två selectboxarna.

Medlem sedan juni 20019 519 inlägg
#8

Vad saknas i exemplet? Skall andra selecten inte ha något värde by default?

Medlem sedan jan. 20013 341 inlägg
#9

i exemplet saknas möjligheten att ett värde kan vara tomt.
Reglerna är så här, i ruta ett är alltid "www." valt som standard, i ruta 2 är första domänen vald som standard om det bara finns en domän, finns det flera domäner så är "--Välj domän --" valt initialt men då finns inte några boxar, dvs "selecteddomain_"-fälten, de dyker upp först när man har valt en domän.
Sammanfattning
1. www. alltid valt som standard
2. Om det finns en domän så är den vald som standard och "selecteddomain_"-fälten finns och ska fyllas redan vid onload
3. Om flera domäner finns så är "-- Välj domän --" valt som standard, "selecteddomain_"-fälten finns inte och inget behövs fyllas i på onload
4. När domän eller www ändras så ska alla "selecteddomain_"-fälten uppdateras med detta värdet, dvs www.domänen.se eller bara domänen.se

krångligt :)

Medlem sedan juni 20019 519 inlägg
#10

1. http:// är tom i koden ovan - Är det någon miss där?
2. Om andra selectboxens längd är 2 (-- Välj domän -- + domän1.se) så skall domän1.se vara markerad?
3. Om den har en större längd än två (-- Väljd domän, domän1, domän2) så skall -- välj domän -- vara markerad

2 och 3 lägger du in attributet selected="selected" på den option du vill ha markerad default (server kod), eller det har du inte tillgång till att kunna modifiera?

Medlem sedan jan. 20013 341 inlägg
#11

1. http:// är tom i koden ovan - Är det någon miss där?
Nej, den ska vara tom, dvs domänen blir domänen.se, väljer man det andra alternativet så blir det www.domänen.se

2. Om andra selectboxens längd är 2 (-- Välj domän -- + domän1.se) så skall domän1.se vara markerad?
Korrekt, det görs i koden per automatik när allt laddas in från databasen.

3. Om den har en större längd än två (-- Väljd domän, domän1, domän2) så skall -- välj domän -- vara markerad
Korrekt, även det görs per automatik

det stora problemet är som sagt att fylla selecteddomain_{unique ident} när sidan laddas och när förändring sker i något av dropdown-boxarna

Medlem sedan jan. 20013 341 inlägg
#12

http://voigt.se/sandbox/wf/aleborg/select.html
Den är rätt nu :)
Bara på loaden man ska få till den också, är det så här?

	$("select").ready(function() {
		var value = "";
		$("select").each(function() {
			if ($(this).is("[name='domainlist']") && $(this).children().length === 2) {
				$(this).children().last().attr("selected", "selected");
			}
			value += (this.value.indexOf("|") > -1 ? this.value.split("|")[1] : this.value);
		});
		$("input[name*='selecteddomainname_']").each(function() {
			this.value = value;
		});
	}).ready();
Medlem sedan juni 20019 519 inlägg
#13
$(function() { /* ... */ });

Är DOM-Readyn Så så fort jquery kommer åt DOM objekten så kommer den binda och triggar change() eventet.

269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)