Avatar billede superraider Nybegynder
09. april 2006 - 12:34 Der er 23 kommentarer og
1 løsning

fjene værdier der ikke kan vælges.

nedenstående kode er 8 selects som kan vælge fra 1-10. men summen kan aldrig blive over 40. Hvis nogen kan lave sådan den ikke viser de værdier some ikke kan vælges, så 100pt.

læs op på http://www.eksperten.dk/spm/701623


<table>
    <tr><td class="NewsBody">Date<br>
<SCRIPT LANGUAGE="JavaScript">
<!--

istr=40;

window.onload=function(){chkstr("all");}

function chkstr(tmpid){
tmpvalue=0;
if(document.getElementById("classes").value.indexOf(",")!=0){
document.getElementById("classes").value=","+document.getElementById("classes").value;}
slcads=document.getElementsByTagName("select");
slcclasses=document.getElementById("classes").value.split(",");
for(runit=0;runit<slcads.length;runit++){
  if(slcads[runit].className=="adform"){
  if(tmpid=="all"){
    slcads[runit].selectedIndex=slcclasses[runit]-1;
    tmpvalue+=slcclasses[runit];
  }else tmpvalue+=slcads[runit].selectedIndex+1;
  slcclasses[runit]=slcads[runit].selectedIndex+1;
  if(slcads[runit]==tmpid)slcclasses[runit]=tmpid.selectedIndex+1;
  }
}
if((tmpvalue-istr>0)&&(tmpid!="all")){
  tmpid.selectedIndex=istr-(tmpvalue-(tmpid.selectedIndex));
  chkstr(tmpid);
}else document.getElementById("classes").value=slcclasses;
}

  function senddate(){
tmptext=document.getElementById("time").value;
if((tmptext.length==4)&&(tmptext>999)){
tmptext=tmptext.substr(0,2)+":"+tmptext.substr(2)+":00";
document.getElementById("dato").value=document.getElementById("dates").value+" "+tmptext;
}else document.getElementById("dato").value="";
    }

var months = new Array("1","2","3","4","5","6",
            "7","8","9","10","11","12");
var days = new Array("Sunday","Monday","Tuesday","Wednesday",
            "Thursday","Friday","Saturday");

var today = new Date();
var maaned= today.getMonth();
    today = new Date( today.getFullYear(), maaned, today.getDate() );
var oDate = new Date( today.getFullYear(), maaned, 1);
var txt  = new Array();




for ( ; 3>((oDate.getMonth()+24-maaned)%12); ) { // write 3 months
  oDag = "" +oDate.getDate();
if(oDate.getMonth()+1)tmpmon="0"+(oDate.getMonth()+1);
  txt[txt.length] = "<option"
        + ((oDate.valueOf()==today.valueOf()) ?" selected" :"" )
        + " value=\""
        + (10>oDag?"0"+oDag:oDag) + "-"
        + tmpmon + "-"
        + oDate.getFullYear()
        +"\">" +days[oDate.getDay()] +" " +(10>oDag?"0"+oDag:oDag)
        + "-" +months[oDate.getMonth()] +"-" +oDate.getFullYear()
        + "</option>";
  oDate = new Date( oDate.valueOf() + 24*60*60*1000 ); //næste dag
}
document.write( "<select name=dates id=\"dates\" size=1 onChange='senddate();'>"
              + txt.join("") + "</select>");
//-->
</SCRIPT>
    </td></tr>
    <tr><td class="NewsBody">date:<br><input name="dato" id="dato" class="adform" type="text" size="20"></td></tr>
    <tr><td class="NewsBody">Time:<br><input name="time" id="time" class="adform" type="text" size="20" maxlength="4" onkeyup='senddate();'></td></tr>
    <tr><td class="NewsBody">Note:<br><input name="note" class="adform" type="text" size="20"></td></tr>
    <tr><td class="NewsBody"><input class="adform" type="submit" size="10" value="Add Raid"></td></tr>
    <tr><td class="NewsBody">

  <b>Hunter</b>:<br>
<select name="hunter" class="adform" onchange="chkstr(this);">
    <option>1</option><option>2</option><option>3</option>
    <option>4</option><option>5</option><option>6</option>
    <option>7</option><option>8</option><option>9</option>
    <option>10</option>
</select><br>

  <b>Mage</b>:<br>
<select name="Mage" class="adform" onchange="chkstr(this);">
    <option>1</option><option>2</option><option>3</option>
    <option>4</option><option>5</option><option>6</option>
    <option>7</option><option>8</option><option>9</option>
    <option>10</option>
</select><br>

  <b>Rogue</b>:<br>
<select name="Rogue" class="adform" onchange="chkstr(this);">
    <option>1</option><option>2</option><option>3</option>
    <option>4</option><option>5</option><option>6</option>
    <option>7</option><option>8</option><option>9</option>
    <option>10</option>
</select><br>

  <b>Warlock</b>:<br>
<select name="Warlock" class="adform" onchange="chkstr(this);">
    <option>1</option><option>2</option><option>3</option>
    <option>4</option><option>5</option><option>6</option>
    <option>7</option><option>8</option><option>9</option>
    <option>10</option>
</select><br>

<b>Warrior</b>:<br>
<select name="Warrior" class="adform" onchange="chkstr(this);">
    <option>1</option><option>2</option><option>3</option>
    <option>4</option><option>5</option><option>6</option>
    <option>7</option><option>8</option><option>9</option>
    <option>10</option>
</select><br>

<b>Priest</b>:<br>
<select name="Priest" class="adform" onchange="chkstr(this);">
    <option>1</option><option>2</option><option>3</option>
    <option>4</option><option>5</option><option>6</option>
    <option>7</option><option>8</option><option>9</option>
    <option>10</option>
</select><br>

  <b>Paladin</b>:<br>
<select name="Paladin" class="adform" onchange="chkstr(this);">
    <option>1</option><option>2</option><option>3</option>
    <option>4</option><option>5</option><option>6</option>
    <option>7</option><option>8</option><option>9</option>
    <option>10</option>
</select><br>

    <b>Druids</b>:<br>
<select name="Druids" class="adform" onchange="chkstr(this);">
    <option>1</option><option>2</option><option>3</option>
    <option>4</option><option>5</option><option>6</option>
    <option>7</option><option>8</option><option>9</option>
    <option>10</option>
</select><br>

    </td></tr>
    <tr><td class="NewsBody">Classes:<br><input name="classes" class="adform" id="classes" type="text" size="20" value="5,5,5,5,5,5,5,5"></td></tr>
    </table>
Avatar billede roenving Novice
09. april 2006 - 12:41 #1
Det er jo så et problem, at man skal fjerne og tilføje options hele tiden, men det kan jo sagtens gøres, men sal jo så gøres på alle selects !-)

-- i udgangspositionen skal man jo fjerne alle med 6 eller derover ...
Avatar billede mclemens Nybegynder
09. april 2006 - 12:49 #2
Jep :) append'er og remove'r ...
Avatar billede superraider Nybegynder
09. april 2006 - 12:59 #3
men hvis man nu lavede det lidt smarter, så kunne man måske få en lykke til at generee de der selects, ud fra et array(Hunter,rogue,mage) osv
Avatar billede mclemens Nybegynder
09. april 2006 - 13:06 #4
... så bliver det betinget at folk har javascript - gør det noget ?
Avatar billede roenving Novice
09. april 2006 - 13:09 #5
-- det er det vel under alle omstændigheder ?-)
Avatar billede mclemens Nybegynder
09. april 2006 - 13:13 #6
[ -- det er det vel under alle omstændigheder ?-) ]

Ja, ellers kan man jo snyder :P
... jeg får først tid igen iaften :)
Avatar billede mclemens Nybegynder
09. april 2006 - 13:13 #7
snyder = snyde :D
Avatar billede superraider Nybegynder
09. april 2006 - 13:33 #8
tja smid et svar når du har en løsning, jeg bruger det som det indtil
Avatar billede mclemens Nybegynder
10. april 2006 - 00:33 #9
puha, her er lidt ved ikke om det er godt nok :P
- det skal nok lige sættes ind i dit design :)



<SCRIPT LANGUAGE="JavaScript">
<!--

chkstr=40;
chkmaxstr=10;

window.onload=function(){chkscr("all");}

/* Sætter variabelen til første gennemløb */
firstrun=true;

function chkscr(chktypen){

/* Henter classes strengen og splitter ud i array */
chkclass=document.getElementById("classes").value;
chkclass=chkclass.split(",");

/* Beregner den samlede værdi af classes array'et */
if(chktypen=="all"){chktmpval=0;
  for(runit=0;runit<chkclass.length;runit++)chktmpval+=+chkclass[runit];

/* Angiver antal ekstra point til rådighed */
  chkplus=chkstr-chktmpval;
}

/* Finder alle checkboxe med class="adform" */
chkboxs=document.getElementsByTagName("select");
for(runit=0;runit<chkboxs.length;runit++){
  if(chkboxs[runit].className=="adform"){

/* Sender værdien af nuværende afkrydsning til classes array'et */
  if(chktypen!="all"){chkclass[runit]=+chkboxs[runit].selectedIndex+1;}

/* Finder alle optioner i select tag'get */
  if(chktypen=="all"){
    chkopts=chkboxs[runit].getElementsByTagName("option");

/* Sletter alle optioner i select tag'get */
    for(runita=0;runita!=chkopts.length;){
    chkboxs[runit].removeChild(chkopts[runita]);
    }

/* Tilføjer optioner op afhængig af point til rådighed */
  runtester=+chkopts.length;
    for(runital=0;runtester<+chkclass[runit]+chkplus;runital++){
    newopt=document.createElement("option");
    if(runital+1==+chkclass[runit])newopt.setAttribute("selected","selected");
    newopttext=document.createTextNode(runital+1);
    newopt.appendChild(newopttext);
    chkboxs[runit].appendChild(newopt);
    if(runital+1==chkmaxstr)runtester=+chkclass[runit]+chkplus;
    else if(runital+1==+chkclass[runit]+chkplus)runtester=+chkclass[runit]+chkplus;
    }
  }
  }
}

document.getElementById("classes").value=chkclass.join(",");
firstrun=false;
if(chktypen!="all")chkscr("all");
else document.getElementById("pcount").value="Point tilbage: "+chkplus;
}


//-->
</SCRIPT>

  <b>Hunter</b>:<br>
<select name="hunter" class="adform" onchange="setTimeout('chkscr(this);',100);">
<option>Javacript kræves</option>
</select><br>

  <b>Mage</b>:<br>
<select name="Mage" class="adform" onchange="setTimeout('chkscr(this);',100);">
<option>Javacript kræves</option>
</select><br>

  <b>Rogue</b>:<br>
<select name="Rogue" class="adform" onchange="setTimeout('chkscr(this);',100);">
<option>Javacript kræves</option>
</select><br>

  <b>Warlock</b>:<br>
<select name="Warlock" class="adform" onchange="setTimeout('chkscr(this);',100);">
<option>Javacript kræves</option>
</select><br>

<b>Warrior</b>:<br>
<select name="Warrior" class="adform" onchange="setTimeout('chkscr(this);',100);">
<option>Javacript kræves</option>
</select><br>

<b>Priest</b>:<br>
<select name="Priest" class="adform" onchange="setTimeout('chkscr(this);',100);">
<option>Javacript kræves</option>
</select><br>

  <b>Paladin</b>:<br>
<select name="Paladin" class="adform" onchange="setTimeout('chkscr(this);',100);">
<option>Javacript kræves</option>
</select><br>

    <b>Druids</b>:<br>
<select name="Druids" class="adform" onchange="setTimeout('chkscr(this);',100);">
<option>Javacript kræves</option>
</select><br>


<input name="pcount" id="pcount" type="text" size="20" value=" "><br>

<input name="classes" class="adform" id="classes" type="text" size="20" value="5,5,5,5,5,5,5,5">
Avatar billede mclemens Nybegynder
10. april 2006 - 00:37 #10
Mit første forsøg på DOM håndtering med appendChild og removeChild...
men det bliver vel lidt lettere efterhånden som man leger med DOM'en :)
Avatar billede mclemens Nybegynder
10. april 2006 - 01:15 #11
og lige en reset knap:
<a href="#" onclick="document.getElementById('classes').value='5,5,5,5,5,5,5,5';setTimeout('chkscr(\'all\');',100);return false;"><img src="billede.jpg"></a>
Avatar billede superraider Nybegynder
10. april 2006 - 01:44 #12
Avatar billede mclemens Nybegynder
10. april 2006 - 08:07 #13
<script language="JavaScript">
<!--

chkstr=40;
chkmaxstr=10;

window.onload=function(){chkscr("all");}

/* Sætter variabelen til første gennemløb */
firstrun=true;

function chkscr(chktypen){

/* Henter classes strengen og splitter ud i array */
chkclass=document.getElementById("classes").value;
chkclass=chkclass.split(",");

/* Beregner den samlede værdi af classes array'et */
if(chktypen=="all"){chktmpval=0;
  for(runit=0;runit<chkclass.length;runit++)chktmpval+=+chkclass[runit];

/* Angiver antal ekstra point til rådighed */
  chkplus=chkstr-chktmpval;
}

/* Kotrollerer adform select's */
chkctrladform=0;

/* Finder alle checkboxe med class="adform" */
chkboxs=document.getElementsByTagName("select");
for(runit=0;runit<chkboxs.length;runit++){
  if(chkboxs[runit].className=="adform"){

/* Sender værdien af nuværende afkrydsning til classes array'et */
  if(chktypen!="all"){chkclass[chkctrladform]=+chkboxs[runit].selectedIndex+1;}

/* Finder alle optioner i select tag'get */
  if(chktypen=="all"){
    chkopts=chkboxs[runit].getElementsByTagName("option");

/* Sletter alle optioner i select tag'get */
    for(runita=0;runita!=chkopts.length;){
    chkboxs[runit].removeChild(chkopts[runita]);
    }

/* Tilføjer optioner op afhængig af point til rådighed */
  runtester=+chkopts.length;
    for(runital=0;runtester<+chkclass[chkctrladform]+chkplus;runital++){
    newopt=document.createElement("option");
    if(runital+1==+chkclass[chkctrladform])newopt.setAttribute("selected","selected");
    newopttext=document.createTextNode(runital+1);
    newopt.appendChild(newopttext);
    chkboxs[runit].appendChild(newopt);
    if(runital+1==chkmaxstr)runtester=+chkclass[chkctrladform]+chkplus;
    else if(runital+1==+chkclass[chkctrladform]+chkplus)runtester=+chkclass[chkctrladform]+chkplus;
    }
  }
chkctrladform++;
  }
}

document.getElementById("classes").value=chkclass.join(",");
firstrun=false;
if(chktypen!="all")chkscr("all");
else document.getElementById("pcount").value="Point tilbage: "+chkplus;
}

...

og så mangler druids 1 option
<option>et eller andet</option>
... det er kun nødvendig med 1 option pr. stk select da de alle slettes
og regenereres dynamisk fra starten af ud fra antal point til rådighed ;)
Avatar billede mclemens Nybegynder
10. april 2006 - 08:10 #14
( denne blev tilføjet til scriptet )
/* Kotrollerer adform select's */
chkctrladform=0;
Avatar billede mclemens Nybegynder
10. april 2006 - 08:11 #15
og nogle runit varibler blev
rettet til chkctrladform variabler
Avatar billede mclemens Nybegynder
10. april 2006 - 08:19 #16
edit [ og så mangler druids 1 option ]
nej ... den gør ikke det var p.g.a. problemet
med flere select's :P scriptet ovenover løser det :)
Avatar billede superraider Nybegynder
10. april 2006 - 17:32 #17
http://www.borkedguild.net/addraidcopy.asp

kan ikke gennemskue hvorfor "hunter" selected ikk har samme visuele størrelse some de andre. men smid et svar.
Avatar billede mclemens Nybegynder
10. april 2006 - 17:45 #18
svar ;)
Avatar billede mclemens Nybegynder
10. april 2006 - 17:47 #19
og kigger på den...
Avatar billede mclemens Nybegynder
10. april 2006 - 18:11 #20
... forstår den heller ikke, men her så bevarer de deres oprindelige størrelse ...



<SCRIPT LANGUAGE="JavaScript">
<!--

chkstr=40;
chkmaxstr=10;

window.onload=function(){setTimeout("chkscr('all');",100);}

/* Sætter variabelen til første gennemløb */
firstrun=true;

function chkscr(chktypen){

/* Henter classes strengen og splitter ud i array */
chkclass=document.getElementById("classes").value;
chkclass=chkclass.split(",");

/* Beregner den samlede værdi af classes array'et */
if(chktypen=="all"){chktmpval=0;
  for(runit=0;runit<chkclass.length;runit++)chktmpval+=+chkclass[runit];

/* Angiver antal ekstra point til rådighed */
  chkplus=chkstr-chktmpval;
}

/* Kotrollerer adform select's */
chkctrladform=0;

/* Finder alle selectboxe med class="adform" */
chkboxs=document.getElementsByTagName("select");
for(runit=0;runit<chkboxs.length;runit++){
  if(chkboxs[runit].className=="adform"){

/* Sender værdien af nuværende afkrydsning til classes array'et */
  if(chktypen!="all"){chkclass[chkctrladform]=+chkboxs[runit].selectedIndex+1;}

/* Finder alle optioner i select tag'get */
  if(chktypen=="all"){
    chkopts=chkboxs[runit].getElementsByTagName("option");

/* Sørger for at selectbox beholder oprindelig størrelse */
    chkboxs[runit].style.width=chkboxs[runit].offsetWidth+"px";

/* Sletter alle optioner i select tag'get */
    for(runita=0;runita!=chkopts.length;){
    chkboxs[runit].removeChild(chkopts[runita]);
    }

/* Tilføjer optioner op afhængig af point til rådighed */
  runtester=+chkopts.length;
    for(runital=0;runtester<+chkclass[chkctrladform]+chkplus;runital++){
    newopt=document.createElement("option");
    if(runital+1==+chkclass[chkctrladform])newopt.setAttribute("selected","selected");
    newopttext=document.createTextNode(runital+1);
    newopt.appendChild(newopttext);
    chkboxs[runit].appendChild(newopt);
    if(runital+1==chkmaxstr)runtester=+chkclass[chkctrladform]+chkplus;
    else if(runital+1==+chkclass[chkctrladform]+chkplus)runtester=+chkclass[chkctrladform]+chkplus;
    }
  }
chkctrladform++;
  }
}

document.getElementById("classes").value=chkclass.join(",");
firstrun=false;
if(chktypen!="all")chkscr("all");
else document.getElementById("pcount").value="Point tilbage: "+chkplus;
}
Avatar billede mclemens Nybegynder
10. april 2006 - 19:45 #21
window.onload=function(){setTimeout("chkscr('all');",100);}

var en smutter der kom - da jeg prøvede på at få den til at matche i længde

window.onload=function(){chkscr('all');}

er godt nok :)

- det der hjalp var denne:
/* Sørger for at selectbox beholder oprindelig størrelse */
    chkboxs[runit].style.width=chkboxs[runit].offsetWidth+"px";
Avatar billede mclemens Nybegynder
10. april 2006 - 20:05 #22
du kan selvfølgelig også putte en width:100px; eller noget på denne i din css:

.adform{
width:100px;
font-family:"Trebuchet MS";
font-size:12px;
font-weight:bold;
background-color:#000000;
color:e4bf86;
border-top-color:ba9c4e;
border-left-color:ba9c4e;
border-bottom-color:6b4f1c;
border-right-color:6b4f1c;
}
Avatar billede mclemens Nybegynder
10. april 2006 - 21:54 #23
og takker for point :)
Avatar billede mclemens Nybegynder
02. maj 2006 - 01:43 #24
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester