webForumDet fria alternativet
Logga in / Bli medlem

create Element (checkbox)

JavaScript

7 svar · 449 visningar · startad av roady

Medlem sedan jan. 2002473 inlägg
Trådstart#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;
}
Medlem 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);
		}
Medlem 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);

Medlem 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???

Medlem sedan dec. 20025 483 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");
}

:)

Medlem 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

Medlem 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>"

Medlem sedan dec. 20025 483 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.

:)

255 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)