webForumDet fria alternativet

create Element (checkbox)

7 svar · 449 visningar · startad av roady

roadyMedlem sedan jan. 2002473 inlägg
#1

hello...
sitter och pillar med createElement utan större framgång.
har en massa kod som skriver ut ett träd från xml struktur som matas ut från databas, saken är den att den bygger på ul/li taggar och innan namnet på foldern/channel så vill jag ha en kryssruta.

Får det verkligen inte att funka, hur använder man createElement?

function createChannel(elmLI,objNode) {		
		elmLI.className = (objNode.getAttribute('hidden') == "true") ? "folderhidden" : "folder";
	elmLI.innerText = elmLI.dname;
}
roadyMedlem sedan jan. 2002473 inlägg
#2

hur behåller man något och plussar på med innerHtml.

testade med outerHtml för att se vad jag fick fram, min insättning av checkbox funkar men sedan när jag skriver ut text så försvinner den igen.

function createChannel(elmLI,objNode) {
			newRadioButton = document.createElement("<INPUT TYPE='checkbox' NAME='tralalala' VALUE='Second Choice'>")
  			elmLI.insertBefore(newRadioButton);
		
			elmLI.className = (objNode.getAttribute('hidden') == "true") ? "folderhidden" : "folder";
			elmLI.innerText = elmLI.dname;
			alert("visa mig: " +elmLI.outerHTML);
		}
roadyMedlem sedan jan. 2002473 inlägg
#3

woohooo, löste det.
felet är att använde man innerText så skrev man över allt, så då skapa man ett textfält istället och bara lägger till..

typ som
newRadioButton = document.createElement("<input type='checkbox' name='parseMe' value='"+ elmLI.dname +"'>")
elmLI.insertBefore(newRadioButton);
newText = document.createTextNode(elmLI.dname);
elmLI.insertBefore(newText);

roadyMedlem sedan jan. 2002473 inlägg
#4

Har förstått att man skapar formulär saker såhär

var newCheckButton = document.createElement("input");
			newCheckButton.setAttribute("type", "checkbox");
			newCheckButton.setAttribute("value", elmLI.id);
			newCheckButton.setAttribute("id", "parseMe");

dock så fattar jag inte hur jag skall göra om jag vill att den skall vara ikryssad???

Peter SMedlem sedan dec. 20025 484 inlägg
#5

Hm, i IE verkar det som att du måste lägga till noden till formuläret innan du sätter egenskapen checked:

var newCheckButton = document.createElement("input");
...
window.onload = function() {
    document.forms["formular"].appendChild(newCheckButton);
    newCheckButton.setAttribute("checked", "checked");
}

:)

roadyMedlem sedan jan. 2002473 inlägg
#6

javascript är skumt alltså...
gjorde som du skrev, kollar jag efter med outerHTML så ser det helt korrekt ut, CHECKED kommer med och allt, dock så är den inte ikryssad när man tittar på den.

måste man ha den på en onLoad ? problemet är att jag skapar allt dynamiskt och eftersom man klickar runt i trädet så expanderas det dynamiskt och byggs på utan att sidan laddas om

roadyMedlem sedan jan. 2002473 inlägg
#7

jag blir galen *drar i håret*
varför kan jag inte få mina checkboxar ikryssade när de skapas?

tillslut löste det sig, sluta använda createElemen och använd innerHTML istället.
elmLI.innerHTML = "<input type='checkbox' value='"+elmLI.id+"' onclick='inActiveParent(this)' checked>"

Peter SMedlem sedan dec. 20025 484 inlägg
#8

Nej, du behöver inte lägga koden i onload. Däremot måste du lägga till noden till formuläret innan du sätter egenskapen i fråga.

Här är ett annat exempel som använder sig av en länk för att expandera formuläret med inputelementet:

<a
    href="java&#115;cript:void(0)" 
    onclick="document.forms['[b]formulärnamn[/b]'].appendChild(newCheckButton); newCheckButton.setAttribute('checked', 'checked')"
>Add</a>

Notera att det första kommandot i onclick lägger till noden och det andra sätter egenskapen.

:)

Genererad på 378 ms · cache AV · v20260730165559-full.f96bc7eb