Avatar billede felixcat Nybegynder
24. januar 2008 - 10:13 Der er 25 kommentarer og
1 løsning

Disable resten af Checkboxe når der er valgt 2

Hej jeg har denne kode:

<table border=0 cellspacing=0 cellpadding=0>
  <tr>
    <td valign=top class=formtext><em>Select up to 2 spots</em><br>
      <br></td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Apology:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Apology: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Monkeys:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Monkeys: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Monkeys: 30 25/05" onClick="BoxClicked(); GetGroup();">
      &nbsp; :25/:05</td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Whoopee Cushion:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Whoopee: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Titanic:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Titanic: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Titanic 25/05" onClick="BoxClicked(); GetGroup();">
      &nbsp; :25/:05</td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Water Cooler:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Water Cooler: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Water Cooler: 25/05" onClick="BoxClicked(); GetGroup();">
      &nbsp; :25/:05</td>
  </tr>
</table>
<script language="javascript">
<!--
function BoxClicked(event) {
var objForm=document.forms["frm"];
var arrCheckBoxes=GetGroup(objForm, "txtCreative");

//count how many are checked
var checkedCount=0;
for (var i=0; i<arrCheckBoxes.length; i++) {
checkedCount += (arrCheckBoxes[i].checked)?1:0;
}

if (checkedCount >= 2) {
for (var i=0; i<arrCheckBoxes.length; i++) {
if (arrCheckBoxes[i].checked == false) {
arrCheckBoxes[i].disabled = "disabled";
}
}
}
}

function GetGroup(objForm, strName) {
//returns array with all elements having the name given in strName
var result=new Array();
for (var i=0; i<objForm.elements.length; i++) {
var element=objForm.elements[i];
if (element.name == strName) {
result[result.length] = element;
}
}
return result;
}

//-->
</script>


Jeg vil gerne have at man maks kan vælge 2 checkboxe - dvs når man har valgt 2 så bliver resten disabled

men jeg får denne fejl

objForm has no properties

er der nogen der kan se hvad der går galt - skal virke både i FF og IE
Avatar billede w13 Novice
24. januar 2008 - 13:26 #1
Du mangler lige at poste form-tags'ene. (Den med name="frm")
Avatar billede roenving Novice
24. januar 2008 - 14:43 #2
...
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name="txtCreative" value="Water Cooler: 30 seconds" onClick="BoxClicked(this);">
      &nbsp; 30 seconds</td>
...

function BoxClicked(elm) {
  var chks = elm.form.elements[elm.name], num=0, im = chks.length, disable = false;
  for(i=0;im>i;i++)
    num += chks[i].checked ? 1 : 0;
  disable = num == 2
  for(i=0;im>i;i++)
    chks[i].disabled = !chks[i].checked && disable;
}
Avatar billede roenving Novice
25. januar 2008 - 05:22 #3
-- og du skal stadig huske at have <form></form> rundt om tabellen !-)
Avatar billede felixcat Nybegynder
25. januar 2008 - 10:24 #4
<form><table border=0 cellspacing=0 cellpadding=0>
  <tr>
    <td valign=top class=formtext><em>Select up to 2 spots</em><br>
      <br></td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Apology:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Apology: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Monkeys:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Monkeys: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Monkeys: 30 25/05" onClick="BoxClicked(); GetGroup();">
      &nbsp; :25/:05</td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Whoopee Cushion:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Whoopee: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Titanic:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Titanic: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Titanic 25/05" onClick="BoxClicked(); GetGroup();">
      &nbsp; :25/:05</td>
  </tr>
  <tr>
    <td valign=top class=formtext width="150" align="right" style="padding-top: 3px;"><b>Water Cooler:</b></td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Water Cooler: 30 seconds" onClick="BoxClicked(); GetGroup();">
      &nbsp; 30 seconds</td>
    <td class=formtext style="padding-left: 10px;"><input class=formtext type=checkbox name=txtCreative value="Water Cooler: 25/05" onClick="BoxClicked(); GetGroup();">
      &nbsp; :25/:05</td>
  </tr>
</table></form>
<script language="javascript">
<!--
function BoxClicked(elm) {
  var chks = elm.form.elements[elm.name], num=0, im = chks.length, disable = false;
  for(i=0;im>i;i++)
    num += chks[i].checked ? 1 : 0;
  disable = num == 2
  for(i=0;im>i;i++)
    chks[i].disabled = !chks[i].checked && disable;
}

function GetGroup(objForm, strName) {
//returns array with all elements having the name given in strName
var result=new Array();
for (var i=0; i<objForm.elements.length; i++) {
var element=objForm.elements[i];
if (element.name == strName) {
result[result.length] = element;
}
}
return result;
}

//-->
</script>

Jeg må tilstå at jeg ikke er en ørn til javascript men kan stadig ikke få det til at virke
I Firefox får jeg denne fejl:
elm has no properties
Avatar billede felixcat Nybegynder
25. januar 2008 - 10:37 #5
Jeg vil gerne undgå en form kan man ikke anvende noget med getElementById
Avatar billede w13 Novice
25. januar 2008 - 11:29 #6
Nu er det jo sådan, at din egen kode benyttede en form. =) Og hvis du skal submitte data, er det liidt smart med en form. Men ellers er det vel bare at benytte et andet omkransende element i stedet for en form, og så rette objForm i koden til det.
Avatar billede w13 Novice
25. januar 2008 - 11:33 #7
Så jo, du kan godt bruge getElementById i stedet.
Avatar billede felixcat Nybegynder
25. januar 2008 - 12:19 #8
jeg har prøvet at forenkle mit kode.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"lang="da">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>

  <p>Jeg ønsker at deltage i følgende to præsentationer:</p>
 


    <input type="checkbox" id="Koncernoekonomi" onclick="setItems(this)">Koncernøkonomi<br>
    <input type="checkbox" id="DanicaPension" onclick="setItems(this)">Danica Pension<br>
    <input type="checkbox" id="RealkreditDanmark" onclick="setItems(this)"> Realkredit Danmark<br>
    <input type="checkbox" id="DanskeCapital" onclick="setItems(this)">Danske Capital<br>
    <input type="checkbox" id="InternRevision" onclick="setItems(this)">Intern Revision<br>
      <input type="checkbox" id="HR" onclick="setItems(this)">HR<br>
    <input type="checkbox" id="Finanscentre" onclick="setItems(this)">Danske Bank (finanscentre og stabe)<br>
 


<script type="text/javascript" language="javascript">
var freePresentationCount=0
var maxFreePresentation=2

function setItems(item)
{
  if(item.checked)
  {freePresentationCount=freePresentationCount+1}

else
{freePresentationCount=freePresentationCount-1}

if (freePresentationCount>maxFreePresentation)
  {item.checked=false
  freePresentationCount=freePresentationCount-1
  alert('De kan kun deltage i '+maxFreePresentation+' præsentationer. Vælg venligst de '+maxFreePresentation+' præsentationer, som De ønsker at deltage i.')
  }
}
</script>

</body>
</html>


Det virker --- næsten -- hvis man checker og unchecker noget, så lader det til at man kan vælge tre eller flere? Jeg er nok nød til at lave et for loop for at se hvor mange der er checked på et givet tidspunkt. Hvordan gør man det?

Kan man bruge getelemtbyid og hvordan gør man det? Og hvad array - er det en fordel - på forhånd tak

FelixCat

--- Old programmers never die, they just GOSUB without RETURN ----
Avatar billede felixcat Nybegynder
25. januar 2008 - 12:23 #9
Og jeg kan sgu ikke finde ud af det med disable
Avatar billede felixcat Nybegynder
25. januar 2008 - 14:37 #10
Jeg har igen lavet om i koden

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"lang="da">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<p>Jeg ønsker at deltage i følgende to præsentationer:</p>
<input type="checkbox" name="ckb" id="Koncernoekonomi" onclick="chkcontrol(0);">
Koncernøkonomi<br>
<input type="checkbox" name="ckb" id="DanicaPension" onclick="chkcontrol(1);">
Danica Pension<br>
<input type="checkbox" name="ckb" id="RealkreditDanmark" onclick="chkcontrol(2);">
Realkredit Danmark<br>
<input type="checkbox" name="ckb" id="DanskeCapital" onclick="chkcontrol(3);">
Danske Capital<br>
<input type="checkbox" name="ckb" id="InternRevision" onclick="chkcontrol(4);">
Intern Revision<br>
<input type="checkbox" name="ckb" id="HR" onclick="chkcontrol(5);">
HR<br>
<input type="checkbox" name="ckb" id="Finanscentre" onclick="chkcontrol(6);">
Danske Bank (finanscentre og stabe)<br>


</body>
</html>
<script language="JavaScript" type="text/javascript">
function chkcontrol(j) {
var total=0;
for(var i=0; i < document.getElementsByTagName('input').ckb.length; i++){
if(document.getElementsByTagName('input').ckb[i].checked){
total =total +1;}
if(total > 2){
alert('De kan kun deltage i 2 præsentationer.')
document.getElementsByTagName('input').ckb[j].checked = false;
return false;
}
}
}
</script>

Nu virker det i IE men ikke i Firefox - må være et eller andet med et tag - jeg er blevet kodeblind - er der nogle der har et forslag

tia
Felixcat
Avatar billede w13 Novice
25. januar 2008 - 14:50 #11
Checked bliver muligvis fortolket forskelligt. Prøv evt. at alerte dens værdi
Avatar billede roenving Novice
25. januar 2008 - 14:53 #12
Hvorfor gør du ikke bare, som jeg viste (i øvrigt er der ganske få steder i et html-dokument, man ikke må placere et script-tag, du har valgt en af de få ulovlige steder !-)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso8859-1">
<title>Untitled Document</title>

<script language="JavaScript" type="text/javascript">
function chkcontrol(elm) {
  var chks = elm.form.elements[elm.name], num=0, im = chks.length, disable = false;
  for(i=0;im>i;i++)
    num += chks[i].checked ? 1 : 0;
  disable = num == 2
  for(i=0;im>i;i++)
    chks[i].disabled = !chks[i].checked && disable;
}
</script>
</head>
<body>
<form action="" method="post">
<p>Jeg ønsker at deltage i følgende to præsentationer:</p>
<input type="checkbox" name="ckb" id="Koncernoekonomi" onclick="chkcontrol(this);">
Koncernøkonomi<br>
<input type="checkbox" name="ckb" id="DanicaPension" onclick="chkcontrol(this);">
Danica Pension<br>
<input type="checkbox" name="ckb" id="RealkreditDanmark" onclick="chkcontrol(this);">
Realkredit Danmark<br>
<input type="checkbox" name="ckb" id="DanskeCapital" onclick="chkcontrol(this);">
Danske Capital<br>
<input type="checkbox" name="ckb" id="InternRevision" onclick="chkcontrol(this);">
Intern Revision<br>
<input type="checkbox" name="ckb" id="HR" onclick="chkcontrol(this);">
HR<br>
<input type="checkbox" name="ckb" id="Finanscentre" onclick="chkcontrol(this);">
Danske Bank (finanscentre og stabe)<br>

</form>
</body>
</html>

-- du skal vel alligevel bruge form-elementet til at afsende, så det satte jeg bare ind, og selv om collections (heriblandt form.elements !-) virker i xhtml 1 trans, så er de deprecated, og xhtml kan ikke læses som andet end fejlfyldt html4.01 af nogensomhelst browsere, så det blev til html4 ...

-- at jeg så også lige ændrede tegnsættet, var bare fordi jeg har min editor indstillet til det, den ændrer du bare, så det dur hos dig !-)
Avatar billede roenving Novice
25. januar 2008 - 14:55 #13
-- og nej, det er ikke checked, der bliver fortolket forskelligt, det er konstruktionen med felter som en collection som property på et array, der ganske simpelt ikke giver rigtig mening !o]
Avatar billede felixcat Nybegynder
25. januar 2008 - 15:01 #14
jeg kan ikke bruge forms da det er inde i et cms system og det vil fejle hvis man bruger form tags - er der ikke noget andet man kan bruge
Avatar billede felixcat Nybegynder
25. januar 2008 - 15:06 #15
ellers ser det rigtig fint ud
Avatar billede roenving Novice
25. januar 2008 - 15:19 #16
-- så bliver formen jo sat på, når den kører igennem cms-systemet, så du kan sagtens bruge modellen !-)
Avatar billede felixcat Nybegynder
25. januar 2008 - 15:32 #17
DOOh - selvfølgelig

jeg har lige et andet spørgsmål

jeg har den select

<li class="whitetop">
        <label for="Studieretning">Studieretning</label>
        <select name="fld13" class="required activemark" onchange="display('Studieretning');" id="Studieretning">
          <option selected="selected" value=""></option>
        <option value="Cand.merc.aud.">Cand.merc.aud.</option>
          <option value="StudieretningAndet">Andet</option>
        </select>
        <span class="reqmark">&nbsp;</span></li>
     
hvis man vælger "andet" vises denne input

<li class="hide" id ="andetstudieretning">
        <label for="BeskrivAndetStudieretning">Beskriv studieretning:</label>
        <input type="text" class="requiredIfVisible activemark" tabindex="11"  title="Andet Studieretning." name="fld14" id="BeskrivAndetStudieretning" />
        <span class="reqmark">&nbsp;</span></li>

jeg har en lignende select længere ned
Hvor det er det samme som gør sig gældene

<li class="whitetop">
        <label for="Studerende">Studerende/Dimmittend</label>
        <select name="fld16" class="required activemark" onchange="display('Studerende');" id="Studerende">
          <option selected="selected" value=""></option>
          <option value="10. semester">10. semester</option>
          <option value="Dimittend">Dimittend</option>
          <option value="StuderendeAndet">Andet</option>
        </select>
        <span class="reqmark">&nbsp;</span></li>

igen hvis man vælger andet så kommer nedstående input   

<li class="hide" id="andenstuderende">
        <label for="BeskrivAndetStuderende">Beskriv:</label>
        <input type="text" class="requiredIfVisible activemark" tabindex="2"  title="Skriv dit navn." name="fld17" id="BeskrivAndetStuderende" />
        <span class="reqmark">&nbsp;</span></li>

jeg har en display funktion til det


<script type="text/javascript">
function hide(){

    var element = document.getElementById('andetstudieretning');
    DisplayToolbox.hideElement(element);
    var element = document.getElementById('andenstuderende');
    DisplayToolbox.hideElement(element);
    var element = document.getElementById('andetkandidatkonference');
    DisplayToolbox.hideElement(element);
}
function display(fieldid){
hide();

var selectbox=document.getElementById(fieldid);
var selectedvalue= DBcore.selectedValueOf(selectbox);

switch (selectedvalue){
case 'StudieretningAndet':
    var element = document.getElementById('andetstudieretning');
    DisplayToolbox.showElement(element);
    break;
case 'StuderendeAndet':
    var element = document.getElementById('andenstuderende');
    DisplayToolbox.showElement(element);
    break;
    case 'KonferenceAndet':
    var element = document.getElementById('andetkandidatkonference');
    DisplayToolbox.showElement(element);
    break;
}
}

</script>

OG NU KOMMER SPØRGSMÅLET
Hvis man vælger andet i den første select - indtaster noget tekst og herefter vælger andet i den næste select - så fjernes den første select og vice versa

hvordan kan man forhindre dette
Avatar billede felixcat Nybegynder
25. januar 2008 - 15:33 #18
vi bruger forresten et custom js bibliotek
Avatar billede roenving Novice
25. januar 2008 - 15:38 #19
-- det er vel fordi den submittes for at udføre handlingerne ?-)
Avatar billede felixcat Nybegynder
25. januar 2008 - 15:39 #20
Hvis man fjerner dette hide();

Så fjernes de ikke men så kan man ikke ændre det igen?
Avatar billede felixcat Nybegynder
25. januar 2008 - 15:40 #21
nej det skulle gerne virke clientside
Avatar billede felixcat Nybegynder
25. januar 2008 - 15:41 #22
altså inden submit af formen
Avatar billede roenving Novice
25. januar 2008 - 15:50 #23
-- jeg ville jo gøre det helt simpelt:

<li class="whitetop">
        <label for="Studieretning">Studieretning</label>
        <select name="fld13" class="required activemark" onchange="document.getElementById('andetstudieretning').style.display=this.selectedIndex==2?'block':'none';" id="Studieretning">
          <option selected="selected" value=""></option>
        <option value="Cand.merc.aud.">Cand.merc.aud.</option>
          <option value="StudieretningAndet">Andet</option>
        </select>
        <span class="reqmark">&nbsp;</span></li>
     
hvis man vælger "andet" vises denne input

<li class="hide" id ="andetstudieretning">
        <label for="BeskrivAndetStudieretning">Beskriv studieretning:</label>
        <input type="text" class="requiredIfVisible activemark" tabindex="11"  title="Andet Studieretning." name="fld14" id="BeskrivAndetStudieretning" />
        <span class="reqmark">&nbsp;</span></li>
Avatar billede felixcat Nybegynder
25. januar 2008 - 15:54 #24
ok jeg kigger på det senere - smider du lige et svar - du har ærligt og redeligt fortjent dine point

og tak for hjælpen

/Felixcat
Avatar billede roenving Novice
25. januar 2008 - 15:58 #25
Velbekomme '-)
Avatar billede roenving Novice
25. januar 2008 - 16:28 #26
-- og tak for point ;~}
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