webForumDet fria alternativet

Komma ihåg val bland två <select>s

10 svar · 281 visningar · startad av Pace

PaceMedlem sedan juni 20019 024 inlägg
#1
KoplikMedlem sedan juli 20011 129 inlägg
#2

Åh, detta var intressant, javascript kontroll.

Jag kan det inte (iaf inte enkelt)

*väntar på någon "wiz" att dyka in*

Förlåt om jag gav dig falska förhoppningar nu Pace när du såg att någon svarade

[Tillägg]
Det jag skulle spela på är multidimensionerade arrayer i JS som tyvärr inte är inbyggda enligt min kunskap, men låt oss låtsas att dom är det, det går ju att skapa dom fast jag tycker det är drygt.
Men till min fantasivärld nu:

t.ex

somearray = new Array[9,7]

när man markerar Läsa, Lägg till ny post, Redigera egen post så blir det enkelt sett

somearray(0, 0) = true //boolean eller whatever
somearray(0, 1) = true 
somearray(0, 2) = true 
//Resten blir false

När jag skrev detta kom jag på en annan grej, spekulerar och stör nu bara

  somearray = new Array(9)

  somearray(0) = "0, 1, 2"

sen kollar man upp det med 

if(somearray(0).indexOf("1"))
  document.Form.Behorighet.options(1).selected

Nu har jag inte min roliga JS-bok här och kommer inte ihåg hur indexOf och hur man "selectade" en rad korrekt via Javascript, men du förstår nog.

Bara mina cent om ingen annan kommer med ett gyllene drag

PaceMedlem sedan juni 20019 024 inlägg
#3

:e

Ingen fara, det är ju det som forum handlar om. ;)

KoplikMedlem sedan juli 20011 129 inlägg
#4

Annars är det ju alltid bäst att köra ASP om javascriptet lägger av av någon anledning när man fixat behörighet för 9 objekt, då kommer kunderna och sliter tarmarna ur kroppen på en ;)

Om ingen perfalösning kommer så kan man ju spara valen när man markerar nästa objekt.

En annan fråga, går det inte att köra checkboxar på behörigheterna istället, så slipper man komma ihåg control hela tiden.

Inga svar här, bara lite funderingar... man kanske borde bli filosof

PaceMedlem sedan juni 20019 024 inlägg
#5

Tack för förslagen! :)

Om det görs på servern eller klienten spelar ingen som helst roll. Det är till ett intranät där jag - uteslutande - kommer att pilla på rättigheterna och spelar därför ingen roll om det kräver Lynx eller MSIE 6.34535+ eller vad som nu kan tänkas vara senaste läsaren. ;)

Har du några idéer om hur man kan bygga upp det på serversidan så att det fortfarande blir lättarbetat och funktionellt? Det står stilla i mitt huvud. Kan tillägga att jag använder Asp.Net.

solbulleMedlem sedan mars 20015 287 inlägg
#6

Jag förstår inte riktigt problemet...
När du satt rättigheterna för en applikation, ska du då inte posta formen och spara (typ i asp/session/whatever) samt tömma det då?
För att sen fortsätta med en annan applikation?
När alla applokationer är satta får man väl ta o klicka på en annan knapp som postar/skickar formen till en ny sida där du gör vad du nu vill syssla med sedan. :)

PaceMedlem sedan juni 20019 024 inlägg
#7

Det är det jag inte vill göra eftersom det i skrivande stund rör sig om 47 st applikationer. Att göra postbacks 47 gånger är inget jag vill göra i onödan, då lägger jag hellre den uppgiften på klienten.

Arbetsflödet är som sådant att man väljer först den roll man vill redigera. I rollen (i detta fallet "nyhetsredaktör") lägger man till rättigheter för varje applikation.

Naturligtvis är det inte vanligt att en användare har tillgång till allt, men de ska ha läsbehörighet i de flesta applikationer och därför blir det svårt/jobbigt att hantera 47 postbacks. Men jag kanske missuppfattar dig, du kanske menar något annat.

dectgapMedlem sedan sep. 20021 655 inlägg
#8

Kolla här:

<html>

<head>
<title>xxx</title>

<script type="text/javascript">
var permissions = [
    [0, 0, 0, 0, 0, 0, 1],  // Adresser
    [0, 0, 0, 0, 0, 1, 0],  // Användare
    [0, 0, 0, 0, 0, 1, 1],  // Artiklar
    [0, 0, 0, 0, 1, 0, 0],  // Bildbank
    [0, 0, 0, 0, 1, 0, 1],  // Dokument
    [0, 0, 0, 0, 1, 1, 1],  // Gästbok
    [0, 0, 0, 1, 0, 0, 0],  // Inställningar
    [0, 0, 0, 1, 0, 0, 1],  // Kalendern
    [0, 0, 0, 1, 0, 1, 0],  // Nyheter
    [0, 0, 0, 1, 0, 1, 1]]; // Ordlista

function updatePermissions(theForm){
    for(var i=0; i<7; i++)
        theForm.lbPermissions.options[i].selected = permissions[theForm.lbApplications.selectedIndex][i];
}

function storePermissions(theForm){
    for(var i=0; i<7; i++)
        permissions[theForm.lbApplications.selectedIndex][i] = (theForm.lbPermissions.options[i].selected) ? 1 : 0;
}

function sendPermissions(theForm){
    for(var i=0; i<7; i++)
        theForm.elements["perm"+i].value = permissions[i].join(",");
}

window.onload=function(){
    updatePermissions(document.forms[0]);
}
</script>
</head>

<body>

<form onsubmit="sendPermissions(this)">
    <input type="hidden" name="perm0" />
    <input type="hidden" name="perm1" />
    <input type="hidden" name="perm2" />
    <input type="hidden" name="perm3" />
    <input type="hidden" name="perm4" />
    <input type="hidden" name="perm5" />
    <input type="hidden" name="perm6" />
    <input type="hidden" name="perm7" />
    <input type="hidden" name="perm8" />
    <input type="hidden" name="perm9" />
	<h3>Redigera inställningar för "nyhetsredaktör"</h3>
	
	<table>
	<tr>
		<th>Applikation</th>
		<th>Behörighet</th>
	</tr>
	<tr>
		<td>
    		<select name="lbApplications" onchange="updatePermissions(this.form)" size="10" id="lbApplications" style="width:300px;">
        		<option value="20" selected="selected">Adresser</option>
        		<option value="41">Användare</option>
        		<option value="17">Artiklar</option>
        		<option value="45">Bildbank</option>
        		<option value="39">Dokument</option>
        		<option value="32">Gästbok</option>
        		<option value="46">Inställningar</option>
        		<option value="23">Kalendern</option>
        		<option value="1">Nyheter</option>
        		<option value="24">Ordlista</option>
    		</select>
		</td>
		<td>
    		<select name="lbPermissions" size="10" onchange="storePermissions(this.form)" multiple="multiple" id="lbPermissions" style="width:300px;">
        		<option value="1">Läsa</option>
        		<option value="2">Lägg till ny post</option>
        		<option value="3">Redigera egen post</option>
        		<option value="4">Redigera annans post</option>
        		<option value="5">Ta bort egen post</option>
        		<option value="6">Ta bort annans post</option>
        		<option value="7">Publicera</option>
    		</select>
		</td>
	</tr>
	</table>
	<input type="submit" />
</form>

</body>

</html>

På mottagarsidan tar du emot de val man har gjort genom perm0, perm1, perm2, ..., perm9. De består av kommaseparerade listor där ett värde kan vara 1 eller 0. En etta betyder att fältet är valt och en nolla betyder att det inte är valt.

perm2=0,0,0,0,0,0,1 betyder alltså att för Artiklar är endast Publicera valt.

PaceMedlem sedan juni 20019 024 inlägg
#9

Tack så mycket dectgap! :D

Men! (det finns alltid ett men ;))
Det funkar exakt som jag önskar, men det kan bli problematiskt att sätta/läsa värdena för rättigheterna eftersom de är baserade på index (tänker på perm2=0,0,0,0,0,0,1).

Det vore smidigt om man kunde få värdena på ett mer lätthanterligt sätt. Antalet rättigheter och applikationer kan variera (hämtas dynamiskt från en databas) och därför är det svårt att veta att perm2 är kopplat till Artiklar och vilken av serieföljden 0,0,0,0,0,0,1 som är kopplad till vad i behörigheten.

Helst skulle jag vilja ha ut ID:t som står som value. Exempelvis behörighet 1,2,3 (läsa, lägga till ny, redigera egen post) för applikationen 17.

Till exempel (pseudo-kod):

application[17] = perm(1,2,3)

Men tack än en gång. :)

dectgapMedlem sedan sep. 20021 655 inlägg
#10
<html>

<head>
<title>xxx</title>

<script type="text/javascript">
var permissions = [
    [0, 0, 0, 0, 0, 0, 1],  // Adresser
    [0, 0, 0, 0, 0, 1, 0],  // Användare
    [0, 0, 0, 0, 0, 1, 1],  // Artiklar
    [0, 0, 0, 0, 1, 0, 0],  // Bildbank
    [0, 0, 0, 0, 1, 0, 1],  // Dokument
    [0, 0, 0, 0, 1, 1, 1],  // Gästbok
    [0, 0, 0, 1, 0, 0, 0],  // Inställningar
    [0, 0, 0, 1, 0, 0, 1],  // Kalendern
    [0, 0, 0, 1, 0, 1, 0],  // Nyheter
    [0, 0, 0, 1, 0, 1, 1]]; // Ordlista

function updatePermissions(theForm){
    for(var i=0; i<7; i++)
        theForm.lbPermissions.options[i].selected = permissions[theForm.lbApplications.selectedIndex][i];
}

function storePermissions(theForm){
    for(var i=0; i<7; i++)
        permissions[theForm.lbApplications.selectedIndex][i] = (theForm.lbPermissions.options[i].selected) ? 1 : 0;
}

function sendPermissions(theForm){
    var tempId, tempArray;
    var i=10;
    while(i>0){
        tempArray = new Array();
        i--;
        for(var j=0; j<7; j++)
            if(permissions[i][j]==1)
                tempArray[tempArray.length] = (j+1);

        tempId = theForm.lbApplications.options[i].value;
        theForm.elements["application["+tempId+"]"].value = tempArray.join(",");
    }
}

window.onload=function(){
    updatePermissions(document.forms[0]);
}
</script>
</head>

<body>

<form onsubmit="sendPermissions(this)" action="http://roslund.homeip.net/mattias/arbetsplats/showForm.php">
    <input type="hidden" name="application[20]" />
    <input type="hidden" name="application[41]" />
    <input type="hidden" name="application[17]" />
    <input type="hidden" name="application[45]" />
    <input type="hidden" name="application[39]" />
    <input type="hidden" name="application[32]" />
    <input type="hidden" name="application[46]" />
    <input type="hidden" name="application[23]" />
    <input type="hidden" name="application[1]" />
    <input type="hidden" name="application[24]" />
	<h3>Redigera inställningar för "nyhetsredaktör"</h3>
	
	<table>
	<tr>
		<th>Applikation</th>
		<th>Behörighet</th>
	</tr>
	<tr>
		<td>
    		<select name="lbApplications" onchange="updatePermissions(this.form)" size="10" id="lbApplications" style="width:300px;">
        		<option value="20" selected="selected">Adresser</option>
        		<option value="41">Användare</option>
        		<option value="17">Artiklar</option>
        		<option value="45">Bildbank</option>
        		<option value="39">Dokument</option>
        		<option value="32">Gästbok</option>
        		<option value="46">Inställningar</option>
        		<option value="23">Kalendern</option>
        		<option value="1">Nyheter</option>
        		<option value="24">Ordlista</option>
    		</select>
		</td>
		<td>
    		<select name="lbPermissions" size="10" onchange="storePermissions(this.form)" multiple="multiple" id="lbPermissions" style="width:300px;">
        		<option value="1">Läsa</option>
        		<option value="2">Lägg till ny post</option>
        		<option value="3">Redigera egen post</option>
        		<option value="4">Redigera annans post</option>
        		<option value="5">Ta bort egen post</option>
        		<option value="6">Ta bort annans post</option>
        		<option value="7">Publicera</option>
    		</select>
		</td>
	</tr>
	</table>
	<input type="submit" />
</form>

</body>

</html>

Om du inte tvunget (t ex för att automatiskt skapa arrays i PHP) måste ha med hakparenteser i namnen som skickas vidare till nästa sida skulle jag råda dig att ändra dem till något annat eftersom man egentligen inte får lov att ha med hakparenteser i namn.

Vill du att det ska stå "perm(x,y,z,)" kan du ändra rad 40 till

        theForm.elements["application["+tempId+"]"].value = "perm("+tempArray.join(",")+")";
PaceMedlem sedan juni 20019 024 inlägg
#11

Tack återigen dectgap! :)

Jag ska undersöka möjligheten att pussla ihop detta med serverkoden, förhoppningsvis går det bra. Om inte så lär jag återkomma hit! ;)

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