Avatar billede tamen Nybegynder
13. oktober 2007 - 21:32 Der er 15 kommentarer og
1 løsning

Vælge en række checkboxes i en tabel

Jeg har et table med informationer i. Det table kan sorteres vha. sorttable: http://www.kryogenix.org/code/browser/sorttable/

En enkelt row kan se sådan ud:
<tr><td><input type="checkbox" name="keywords[]" value="57"></td><td>chrysler strike</td><td>0</td><td>-</td></tr>

Er der nogen der kender, eller kan skrive et script der gør at man krydser to checkboxes af og klikker på en knap, og så krydser scriptet de checkboxes af, der er imellem dem man selv valgte?

Rækkerne kan sorteres, så desværre kan det ikke "bare" gøres ved at give checkboxene ID-numre og så vælge de ID'er der ligger imellem dem man har valgt.

Anybody?
Avatar billede tamen Nybegynder
13. oktober 2007 - 21:36 #1
Jeg kunne forestille mig det var noget med at loope gennem rows'ne indtil man møder en der er krydset af, og så begynder at krydse af derfra til man møder en der allerede er krydset af.
Avatar billede w13 Novice
13. oktober 2007 - 21:51 #2
Umiddelbart vil jeg skyde på noget à la:
----------------------------------------
var checking="false";
for(i=0;i<document.getElementById("tabellen").getElementsByTagName("tr").length;i++){
if(document.getElementById("tabellen").getElementsByTagName("tr")[i].checked) checking=checking=="false"?"true":"done";
if(checking=="true") document.getElementById("tabellen").getElementsByTagName("tr")[i].checked="true";
}
Avatar billede tamen Nybegynder
13. oktober 2007 - 21:55 #3
Takker. Prøver det af.
Avatar billede kalp Novice
13. oktober 2007 - 22:03 #4
Hejsa,

Jeg har lavet følgende til inspiration.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script type="text/javascript">
function CheckBoxes()
{
  var foundStart = false;
  var foundEnd = false;
  for(var i = 1; i < 7; i++)
  {
    var id = "row"+i;
    var element = document.getElementById(id);
   
    if(!foundStart)
    {
        if(element.firstChild.checked)
        {
          foundStart = true;
        }
    }
    else
    {
        if(!foundEnd)
        {
          if(element.firstChild.checked)
          {
            foundEnd = true;
          }
          else
          {
            document.getElementById(element.firstChild.id).checked = "true";
          }
        }
    }
  }
}
</script>
</HEAD>
<BODY>
<table>
<tr>
  <td id="row1"><input type="checkbox" id="checkone" /></td>
  <td id="row2"><input type="checkbox" id="checktwo" /></td>
  <td id="row3"><input type="checkbox" id="checkthree" /></td>
  <td id="row4"><input type="checkbox" id="checkfour" /></td>
  <td id="row5"><input type="checkbox" id="checkfive" /></td>
  <td id="row6"><input type="checkbox" id="checksix" /></td>
</tr>
</table>
<label onclick="CheckBoxes();">Test</label>
</BODY>
</HTML>


Den tjekker af fra den første checkbox den finder til den næste.. men hvis du har tjekket 3 af så gør den det så stadig kun mellem de 2 første den finder.
Du har ikke rigtig sagt hvad man skulle gøre i sådan en situation.

Nu har jeg benyttet en table, men det er underordnet.. du kan lave divs og give dem id'er som jeg har gjort her så virker det også.

og så skal dine checkbokse bare have et id også.. det er underordnet hvad du skriver i deres ID.. det er kun "rowX" som jeg benytter i min kode.
Avatar billede w13 Novice
13. oktober 2007 - 22:12 #5
Wups, stor bommert i min kode. Tjekkede rows og ikke checkboxes..

var checking="false";
for(i=0;i<document.getElementById("tabellen").getElementsByTagName("input").length;i++){
if(document.getElementById("tabellen").getElementsByTagName("input")
Avatar billede w13 Novice
13. oktober 2007 - 22:13 #6
Hmmm. Min browser fejler et eller andet.. Prøver igen:

var checking="false";
for(i=0;i<document.getElementById("tabellen").getElementsByTagName("input").length;i++){
if(document.getElementById("tabellen").getElementsByTagName("input")
Avatar billede w13 Novice
13. oktober 2007 - 22:15 #7
Browserskift! :)

var checking="false";
for(i=0;i<document.getElementById("tabellen").getElementsByTagName("input").length;i++){
if(document.getElementById("tabellen").getElementsByTagName("input")[i].getAttribute("type")=="checkbox"){
  if(document.getElementById("tabellen").getElementsByTagName("input")[i].checked) checking=checking=="false"?"true":"done";
  if(checking=="true") document.getElementById("tabellen").getElementsByTagName("input")[i].checked="true";
}
}
Avatar billede tamen Nybegynder
13. oktober 2007 - 22:27 #8
Takker w13. Den virker perfekt :)

Kalp, din virker, så vidt jeg kan se, ud fra ID'er og det kan jeg ikke bruge da ID'erne kan være skiftet rundt.
Avatar billede w13 Novice
13. oktober 2007 - 22:30 #9
Ok. Jamen så opretter jeg da et svar.
Avatar billede kalp Novice
13. oktober 2007 - 22:30 #10
tamen >> Du tager fejl.. rows flytter sig netop ikke;) selv hvis det var divs.
Avatar billede tamen Nybegynder
13. oktober 2007 - 23:18 #11
Ja kalp. Dine rows flytter sig ikke. Men mine gør :)
Avatar billede kalp Novice
13. oktober 2007 - 23:29 #12
tamen >> okay nogle sortere checkboksene ved at flytte dem fra en <tr> til en anden.. du flytter hele <tr> fra et sted til et andet og ikke kun checkboksen.

men det kunne jeg selvfølgelig ikke se ud fra den kode du har præsenteret:)

det også underordnet.. det godt det virker nu.
Avatar billede roenving Novice
14. oktober 2007 - 05:34 #13
-- og koden kan da optimeres ganske betydeligt:

var checking=false, inps = document.getElementById("tabellen").getElementsByTagName("input");
for(i=0,im=inps.length;im>i;i++){
if(inps[i].getAttribute("type")=="checkbox"){
  if(inps[i].checked) checking = !checking?true:"done";
  if(checking===true) inps[i].checked = true;
}
}
Avatar billede w13 Novice
14. oktober 2007 - 14:03 #14
Jep. Og sidste linje kan vel bare være:  if(checking) inps[i].checked = true;
Avatar billede roenving Novice
15. oktober 2007 - 01:46 #15
Nej, for den vil også reagere på "done" ...

-- derfor triple-lighedstegn, som også checker på datatypen !-)
Avatar billede w13 Novice
15. oktober 2007 - 02:18 #16
Ah ja, self.
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