[javascript] een tabel met checkboxen vullen vanuit popup

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
mbv deze functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 <script language="javascript" type="text/javascript">
 var count = 0;
 function add_checkbox(no)
 {
    if (count == 10)
    {
        var nieuw = '</tr><tr>\n';
        count = 0;
    }
    else
        var nieuw = '';
    nieuw       = nieuw+' <td>\n\t'+no+': <input type="checkbox" name="printed['+no+']" checked>\n </td>\n';
    var huidig  = opener.document.getElementById('formvalues').innerHTML;
    opener.document.getElementById('formvalues').innerHTML = huidig+nieuw;
    count++;
 }
 </script>
vul ik vanuit een popup een <table> tag op de pagina die de popup heeft geopend met een aantal checkboxen. Nou voegt die functie alleen geheel op eigen houtje ook allemaal <tbody> en andere <tr> tags toe waar ik nooit om gevraagd heb.

output van de functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        <tbody><tr>
        </tr>
        </tbody> <tbody><tr><td>
    260: <input type="checkbox" name="printed[260]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    262: <input type="checkbox" name="printed[262]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    263: <input type="checkbox" name="printed[263]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    266: <input type="checkbox" name="printed[266]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    267: <input type="checkbox" name="printed[267]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    268: <input type="checkbox" name="printed[268]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    269: <input type="checkbox" name="printed[269]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    270: <input type="checkbox" name="printed[270]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    271: <input type="checkbox" name="printed[271]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    272: <input type="checkbox" name="printed[272]" checked="checked">
 </td></tr></tbody><tbody><tr>
 <td>
    273: <input type="checkbox" name="printed[273]" checked="checked">
 </td></tr></tbody> <tbody><tr><td>
    274: <input type="checkbox" name="printed[274]" checked="checked">
 </td></tr></tbody>
En daar ben ik niet zo blij mee, want nu komt alles onder elkaar te staan ipv per regel van 10 naast elkaar.

Weet iemand hoe ik dat kan verhelpen?

(p.s. op de oorspronkelijk pagina is dit m'n html code:
<table id="formvalues">
<tr>
</tr>
</table>)

Verwijderd

Waarom voeg je het niet met DOM-methodes toe? Die innerHTML is helemaal niet nodig.

Kun je je functie even beter uitleggen? Ik snap het namelijk niet helemaal.

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Hoe bedoel je met DOM-methodes?

De functie is voor het volgende:
Ik open vanaf een pagina een popupje waarin een heleboel bladzijden worden uitgeprint. Bij iedere bladzijde die ik uitprint moet er een checkbox (met vinkje) op de oorspronkelijke pagina komen te staan die aangeeft dat de pagina goed is uitgeprint, zodat die informatie vervolgens in een database kan worden opgeslagen en men weet dat de pagina al een keer is uitgeprint (en dus verwerkt). Dat moet zo, omdat er van alles met de printer mis kan gaan en bepaalde pagina's dus ook uitgevinkt kunnen worden, zodat ze bij het refreshen nog een keer worden uitgeprint. Hoop dat het duidelijk is.

Zou je mij kunnen uitleggen wat je met DOM-methodes bedoelt?

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Document Object Modeling gaat er vanuit dat je je HTML pagina als object ziet; dus bijv niet getElementByID; maar document.formValues

[google=javascript DOM]

[ Voor 95% gewijzigd door Spider.007 op 23-02-2003 22:34 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
oke, ik heb het geprobeerd, maar ik snap toch nog niet hoe ik 'm nou moet aanspreken. Al die tutorials leggen alleen maar uit hoe het voor formulieren, frames en plaatjes werkt. Hoe spreek ik nou de html binnen een tabel aan?

ik heb dus een tabel:

<table id="formvalues">
<tr>
</tr>
</table>

Waarvan ik de html wil veranderen
Ik heb het o.a. geprobeerd door opener.document.formvalues.value ... maar dat wil allemaal niet. Zou iemand me de juiste syntax kunnen vertellen?

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Oke....ik heb gevonden wat ik zocht...denk ik. maar het werkt niet en ik snap de foutmelding niet. Dit is hoe ik het nu heb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 <script language="javascript" type="text/javascript">
 var count = 0;
 function add_checkbox(no)
 {
    if (count == 10)
    {
        var nieuw = '</tr><tr>\n';
        count = 0;
    }
    else
        var nieuw = '';
    nieuw       = nieuw+' <td>\n\t'+no+': <input type="checkbox" name="printed['+no+']" checked>\n </td>\n';
    var huidig  = opener.document.getElementById('formvalues');
    huidig.appendChild(nieuw);
    count++;
 }
 </script>

Error: uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOMHTMLTableElement.appendChild]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"

Geen idee wat ik fout doe en hoe ik het op moet lossen...

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 22-08 08:30
Met appendChild voeg je een HTMLElement toe, dat is dus een object wat je eerst in elkaar moet knutselen met createElement. En je moet er dus niet gewoon HTML mee plakken. Vandaar de foutmelding...

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 22-08 08:30
Owkee toch nog even wat in elkaar kunnen frutselen voor bedtijd... Dit scriptje bevat de functie voor het toevoegen van de checkboxen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//Constructor Checkbox-object
function Checkbox(name, value, label)
{   this.name = name; this.value = value; this.label = label;
}

//Function adds a row to the table with sTableName
//and inserts the checkboxes in the array aChecks
function AddCheckBoxes(sTableName, aChecks)
{   var oTable = document.getElementById(sTableName);

    //Create and append a new row
    var oTr = oTable.insertRow(oTable.rows.length);

    //Create and append cells for the checkboxes
    for(var i = 0; i < aChecks.length; i++)
    {   var oCurrCheck = aChecks[i];
        //Build cell and add it to oTr
        var oTd = oTr.insertCell(oTr.cells.length);

        //Build checkbox and add it to oTd
        var oCB = document.createElement("INPUT");
        oCB.id = oCB.name = oCurrCheck.name;
        oCB.value = oCurrCheck.value;
        oCB.type = "checkbox";
        oTd.appendChild(oCB);

        //Add value text
        var oTxt = document.createTextNode(oCurrCheck.label);
        oTd.appendChild(oTxt);
    }
}


Zoals je ziet heeft de functie een array nodig, en wel eentje met Checkbox-objectjes... Dat zou er dus zoiets uitzien:

code:
1
2
3
4
aCheckBoxes = new Array();
aCheckBoxes[0] = new Checkbox("Naampje1", "Waarde1", "Tekst erbij 1");
aCheckBoxes[1] = new Checkbox("Naampje2", "Waarde2", "Tekst erbij 2");
aCheckBoxes[2] = new Checkbox("Naampje3", "Waarde3", "Tekst erbij 3");



Als je zo'n array hebt kun je de functie AddCheckBoxes als volgt aanroepen:

code:
1
AddCheckBoxes('TabelNaamHier', aCheckBoxes)


Die aanroep kan bijvoorbeeld aan een knopje gehangen worden. 'TabelNaamHier' moet je natuurlijk even vervangen voor de id/name van de table waar de checkboxes moeten komen.

Tenslotte had je geloof ik vanalles met een popup toch? De AddCheckBoxes functie moet echter in dezelfde pagina staan als de tabel. Je kunt echter wel het Array verplaatsen naar een popup maar vergeet dan niet de Checkbox-functie/constructor ook naar de popup te verplaatsen! :-)

Suc6
Pagina: 1