Avatar billede neeo Nybegynder
10. oktober 2007 - 12:56 Der er 24 kommentarer og
1 løsning

problemer med ´dynamisk opretelse af checkbox

Hej med jer.

jeg sidder nemlig lidt fast i noget :(, håber nogen kan komme med evt. idder eller forklaringer


jeg vil gerne oprette en checkbox igennem javascript ved document load på en html fil, og det virker men jeg kan bare ikke få onclick til at fungere med en lille parameter :(

jeg gøre følgende:
element.ownerDocument.init.add(drawOptions);

  function drawOptions() {
    cell.appendChild(createCheckbox('checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],hidecolumn));
        cell.appendChild(createLabel(SplitCaption[i]));
  }


  function createCheckbox(name, value, id,onclick) {
    var input = document.createElement("input");
    input.type = "checkbox";
    if (name) input.name = name;
    if (value) input.value = value;
    if (id) input.id = id;
    if (onclick) input.onclick = onclick;
   
    return input;
  }
 
 
  function createLabel(text, htmlFor) {
    var label = document.createElement("label");
    if (text) label.appendChild(document.createTextNode(text));
    if (htmlFor) label.htmlFor = htmlFor;
    return label;
  }



  function hidecolumn(send){
    alert(send);
   
  };
Avatar billede w13 Novice
10. oktober 2007 - 12:59 #1
Hvordan ser variablen onclick ud? Jeg ved ikke, om det er farligt at kalde en variable for "onclick"..
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:00 #2
det er faktisk "SplitCaption[i]" jeg vil sende med..
Avatar billede w13 Novice
10. oktober 2007 - 13:02 #3
Men hvad præcis ligger i din onclick-variable?
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:04 #4
min onclick hændelse bliver tegnet i drawOptions igennem createCheckbox, også skal den sende en værdi til funktionen hidecolumn, en alert med parameteren er findt nok.
men jeg kan bare ikke sende noget som helst med over til hidecolum.
men jeg kan godt kalde hidecolumn fra checkboxen :(
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:06 #5
i variablen ligger der "NR." eller "Øster" eller "Æblær" eller "Påskeæg"
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:07 #6
skal jeg smide hele koden op ?
Avatar billede w13 Novice
10. oktober 2007 - 13:16 #7
Det ser ud til, at du bruger hidecolumn som kommando på din onclick. Prøv at ændre til hidecolumn()

Dvs.:

    cell.appendChild(createCheckbox('checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],hidecolumn()));
Avatar billede w13 Novice
10. oktober 2007 - 13:16 #8
Ellers må du lige smide det hele op, ja.
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:22 #9
jeg får alle alert så snart jeg trykker på F5 :( forstår ikke hvordan jeg ellers skal lave det...

det her javascript kode ligger i en HTC fil som bliver kaldt fra min html side.
htc fil.

<public:component>
<PUBLIC:PROPERTY name="caption"/>
<PUBLIC:ATTACH EVENT="onmouseup" ONEVENT="toggleList()" />

<SCRIPT>
    var loaded=0, doc, div,repositionSubscription=null;
  var currentOrderID=0;
  var SplitCaption = caption.split(",");

 

  element.ownerDocument.init.add(drawOptions);
 
  //tegner status popup vinduet
  function drawOptions() {
  var as='bayram'
        div = element.ownerDocument.getElementById('costumizeDropDownElement');
    if (!div) {
      div = document.createElement('div');
      div.id = 'costumizeDropDownElement';
      div.style.position ='absolute';
      div.style.overflow = 'visible';

      div.style.border='1px solid black';
      div.style.backgroundColor='White';
      div.style.display='none';
        div.style.cursor='default'; 
        element.ownerDocument.body.appendChild(div);
       
      var tbl = document.createElement("table");
     
      for(i = 0; i < SplitCaption.length; i++){
        var tblBody = document.createElement("tbody");
        var row = document.createElement("tr");
        var cell = document.createElement("td");
         
    //    cell.appendChild(createCheckbox('checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],hidecolumn));
        cell.appendChild(createCheckbox('checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],hidecolumn('sdssadasd')));
        cell.appendChild(createLabel(SplitCaption[i]));

        row.appendChild(cell);
        tblBody.appendChild(row);
        tbl.appendChild(tblBody);
      }
      div.appendChild(tbl);
      tbl.setAttribute("border", "0");
    };
    };   
         
         
  function createCheckbox(name, value, id,onclick) {
    var input = document.createElement("input");
    input.type = "checkbox";
    if (name) input.name = name;
    if (value) input.value = value;
    if (id) input.id = id;
    if (onclick) input.onclick = onclick;
   
    return input;
  }
 
 
  function createLabel(text, htmlFor) {
    var label = document.createElement("label");
    if (text) label.appendChild(document.createTextNode(text));
    if (htmlFor) label.htmlFor = htmlFor;
    return label;
  }


  function hidecolumn(send){
    alert(send);
   
  };
 
         
    //visning, positionering samt initialisering af vinduet     
    function toggleList(){
    if (event) event.cancelBubble = true;
      if (div.style.display=='none') {
        expand();
      } else {
        collapse();
      }
    }   


    function expand() {
    div.style.display='block';
    div.style.visibility='hidden';
    reposition();
    repositionSubscription = element.ownerDocument.reposition.add(reposition);   
    div.style.visibility='visible';
    };
   
   
    //reposition
    function reposition() {
        var ePos = getAbsPos(element),y=ePos.y+22;
        if (y+div.clientHeight>element.ownerDocument.body.clientHeight+element.ownerDocument.body.scrollTop)
            y = ePos.y-div.clientHeight-1;
        element.ownerDocument.setAbsPos(div,ePos.x,y)
    }; 
   

 
    //lukker  vinduet
    function collapse() {
        var tr = element.ownerDocument.statustbody.firstChild;
        while (tr) {
            var td=tr.firstChild;
            td.style.cursor = 'default';
            tr = tr.nextSibling;
        };
    div.style.display='none';
    if (repositionSubscription) element.ownerDocument.reposition.remove(repositionSubscription);
    repositionSubscription = null;
    };
   

    //cancelbuble
    function cancelBubble() {
        event.cancelBubble = true;
    };
               
</SCRIPT>
</public:component>


kan du bruge det her ?
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:25 #10
i stylesheet filen skal du lige erklære :
  .htcfil {behavior:url(htcfil.htc); cursor:hand}

og du kalder den fra html således.
<td class="htcfil">test</td>
Avatar billede w13 Novice
10. oktober 2007 - 13:28 #11
Det hjalp ikke med hidecolumn()?

Ellers så prøv at undersøge, hvad der bliver genereret af HTML for checkboksen, hvor du bruger noget innerHTML.
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:32 #12
såden her kommer den til se ud.
<td><INPUT id=checkboz_nr type=checkbox value=checkbox_nr><LABEL>nr.</td>

men ved start af siden får jeg alle alertne fra hidecolumn op uden at jeg har bedt om det.. godt nok bliver checkboxen generet ved onload af siden, men det skulle ikke give alert ved onload men ved clik på checkboxen :(
Avatar billede pidgeot Nybegynder
10. oktober 2007 - 13:35 #13
hidecolumn uden paranteser er en reference, med paranteser er det et kald. Dvs. at i dette tilfælde er hidecolumn helt korrekt.

Jeg ville nok prøve et andet parameternavn i metodedefinitionen, som w13 var lidt inde på i 10/10-2007 12:59:47.
Avatar billede w13 Novice
10. oktober 2007 - 13:35 #14
Hmm.. Hvad hvis du overfører hidecolumn() som "hidecolumn()", altså i anførelsestegn. Kunne muligvis være tricket.
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:38 #15
så ser den sådan her ud,
<TD><INPUT id=checkbox_NR onclick="hidevcolumn('test') type=checkbox value...
men nu tegner den ikke noget som helst på skærmen :(
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:41 #16
sorry forkert info, der var noget andet galt, det rettede jeg..

efter have smidt
      cell.appendChild(createCheckbox('checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],'checkbox_' + SplitCaption[i],"hidecolumn('test')"));

får jeg ikke nogen alertbox ved opstart men hellere ikke ved onclik på boxne
Avatar billede w13 Novice
10. oktober 2007 - 13:45 #17
og hvad siger HTML for den dynamiske checkbox nu?
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:48 #18
<TD><INPUT id=checkbox_NR onclick="hidevcolumn('test')" type=checkbox value=checkbox_nr><LABEL>nr.</td>
Avatar billede neeo Nybegynder
10. oktober 2007 - 13:51 #19
betyder det noget at den ligger i en tbody `?
<TBODY><TR>
<TD><INPUT id=checkbox_NR onclick="hidevcolumn('test')" type=checkbox value=checkbox_nr><LABEL>nr.</LabeL></td></TR></TBODY></TABLE>
Avatar billede neeo Nybegynder
10. oktober 2007 - 14:06 #20
hmmm. jeg vælger ikke at sende parameter med.
men vil se på den anden led ved at smide
alert(event.srcElement.value); i hidecolumn funktionen, på denne måde vil jeg have varablen.

men tussind tak for indsatsen og hjælpen :)
Avatar billede neeo Nybegynder
10. oktober 2007 - 14:06 #21
kan du ikke smide et svar..
Avatar billede w13 Novice
10. oktober 2007 - 14:22 #22
Ok. Håber du får fixet det hele.
Avatar billede neeo Nybegynder
10. oktober 2007 - 14:39 #23
det håber jeg også tak for hjælpen :)
Avatar billede w13 Novice
10. oktober 2007 - 14:39 #24
Selv tak. :)
Avatar billede olebole Juniormester
10. oktober 2007 - 16:32 #25
<ole>

Dennne funktion kan ikke fungere i IE:

function createCheckbox(name, value, id,onclick) {
    var input = document.createElement("input");
    input.type = "checkbox";
    if (name) input.name = name;
    if (value) input.value = value;
    if (id) input.id = id;
    if (onclick) input.onclick = onclick;
   
    return input;
}

- den skal se sådan ud:

function createCheckbox(name, value, id,onclick) {
    var input = document.createElement("<input name='"+name+"' type='checkbox'>"); 
    if (value) input.value = value;
    if (id) input.id = id;
    if (onclick) input.onclick = onclick;
   
    return input;


/mvh
</bole>
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