Autor Zpráva
Anonymní
Profil *
ahoj vsem....

narazil sem na mensi problem.... generuji jednotlive radky tabulky a v jedne bunce mam
checkbox. Na tom checkboxu chci volat fci, ale onclick nejde....
zde je kod:



//tato fce bude volana na onclick(u)
function testfce(){alert("ale, ale....")}

function createNewRow(tableBodyId){

var tableObjBody=document.getElementById(tableBodyId);
var numRowBody=tableObjBody.document.getElementsByTagName('TR').length;
var generateId=numRowBody-1;
var generateId2=numRowBody+1;
//var x=newRow.getAttributeNode('id').value;
newRow=document.createElement('TR');
tableObjBody.appendChild(newRow);
//vytvori nove 1 TD s inputbox (type="checkbox")
if(newRow){
document.getElementById('tabulka').className='tableon';
newTDcheck=document.createElement('TD');
newRow.appendChild(newTDcheck);
if(newTDcheck){
newCheckbox=document.createElement('INPUT');
newCheckbox.setAttribute('type','checkbox');
newCheckbox.setAttribute('name','check');
newCheckbox.setAttribute('value',generateId);
// tady se utvari onclick
newCheckbox.setAttribute('onclick', "javascript:testfce();");
//vytvori class atribut (nelze vytvorit metodou setAttribute),+generateId
classAtt=document.createAttribute('class');
classAtt.value='inputCheckbox';
newCheckbox.setAttributeNode(classAtt);
newTDcheck.appendChild(newCheckbox);
}
}
//vytvori dalsi 4 TD s inputbox (type="text")
for(i=0; i<4; i++){
newTD=document.createElement('TD');
newRow.appendChild(newTD);
if(i==1 || i==3){
newInput=document.createElement('INPUT');
newInput.setAttribute('type','text');
newInput.setAttribute('value','struct['+generateId+']'+1);
classAtt=document.createAttribute('class');
classAtt.value='input200';
newInput.setAttributeNode(classAtt);
newTD.appendChild(newInput);
}
else{
newInput=document.createElement('INPUT');
newInput.setAttribute('type','text');
newInput.setAttribute('value','struct['+generateId+']'+2);
classAtt=document.createAttribute('class');
classAtt.value='input100';
newInput.setAttributeNode(classAtt);
newTD.appendChild(newInput);
}
}
}



reseni jsem nasli, vlozit to tam natvrdo pomoci object.innerHTML, ale to je prinejmensim prasarna..... jo testovano v IE 6

nezna nikdo jine reseni...?
derhaaa
Profil *
jenom dodavam, ze tato cesta taky nefunguje.....



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
<style type="text/css">
P{height:10px; background-color:red;}
</style>

<script type="text/javascript">
function testFce(){
alert("nazdar....");
}

function generateObj(){
x=document.createElement("P");
t=document.createTextNode("ahoj");
//vytvoreni attr + hodnota
a=document.createAttribute("onclick");
a.value="javascript:testFce();"

parentObj=document.getElementById("inside");
parentObj.appendChild(x);
x.appendChild(t);
x.setAttributeNode(a);

}
</script>
</head>
<body>
<input type="button" onclick="generateObj();"/>
<div id="inside">
</div>
</body>
</html>
peta
Profil *
function setxEvent(x,xEvent,xFunction)
{
if (isIE) {x[xEvent]=new Function(xFunction);} //IE
else {x.setAttribute(xEvent,xFunction);} //other
}
derhaaa
Profil *
hm, pls check code.... bud to nejde, nebo to mam spatne napsane...



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
<style type="text/css">
P{height:10px; background-color:red;}
</style>

<script type="text/javascript">
function testFce(){
alert("nazdar....");
}

function generateObj(){
x=document.createElement("P");
t=document.createTextNode("ahoj");
x.setAttribute("id","insideP");
//vytvoreni attr + hodnota
/* a=document.createAttribute("onclick");
a.value="javascript:testFce();"
*/
parentObj=document.getElementById("inside");
parentObj.appendChild(x);
x.appendChild(t);
/*x.setAttributeNode(a);*/
setxEvent('insideP','onclick','testFce()');
}
function setxEvent(x,xEvent,xFunction)
{
x[xEvent]=new Function(xFunction);
/*
if (isIE) {x[xEvent]=new Function(xFunction);} //IE
else {x.setAttribute(xEvent,xFunction);} //other
*/
}
</script>
</head>
<body>
<input type="button" onclick="generateObj();"/>
<div id="inside">
</div>
</body>
</html>
peta
Profil *
derhaaa
hej, a javascript konzolu v prohlizeci proc nepouzivas? Tak tvurci prohlizecu se tak snazi kvuli tobe a ty nic?
"isIE is not defined" Proc? Sem myslel, ze takovou funkci snaz zvladnes napsat sam nebo uz pouzivas...
var isIE=(document.all && !window.opera)?1:0;
peta
Profil *
derhaaa
Hej, ale budem se spolu bavit az od te chvile, kdy mi prestanes kod zakomentovavat a pak v klidu napises, ze ti to nefunguje :)
derhaa
Profil
peta.... kod sem zakomentoval z jednoho duvodu....

nikoli kvuli tomu, ze mu neduveruji, ale protoze tuto komponetu vyvijim jen pro IE..... gecko browser pro tuto intranet-app nebude vyvijena.... tak proto, ale jinak sorry.....
Chamurappi
Profil
Reaguji na derhaaa:
Tobě někdo zakázal používat HTML DOM? Jestli ne, tak proč vše řešíš tak užvaněně?
classAtt=document.createAttribute('class');

classAtt.value='inputCheckbox';
newCheckbox.setAttributeNode(classAtt);
Nestačí prostě newCheckbox.className = "inputCheckbox"?

Podobně místo element.setAttribute("jméno", "hodnota") můžeš v klidu používat element.jméno = "hodnota";
Typ text nemusíš u <input>ů nastavovat, je výchozí.

Explorer překládá atributy událostí do JS funkcí v době rozebírání kódu. Na setAttribute tedy již nereaguje, respektive asi přiřadí do atributu řetězec, ale ten se už jako funkce nevezme. Zkoumal jsem, zda o podobném chování hovoří nějaká specifikace, a nic jsem nenašel. Když nad tím teď přemýšlím, napadá mě několik vedlejších efektů, které takové chování může mít, odmyslíme-li si dominanci JavaScriptu mezi skriptovacími jazyky.

I kdyby ten tvůj postup fungoval všude, připadá mi zbytečně krkolomný. Doporučuji prosté přiřazení funkce:
element.onclick = function() { ... }
derhaa
Profil
jenom od me..... diky za zdravou kritiku....


ale nejde mi to.... nejsem nahodou opet uzvaneni....


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
<script type="text/javascript">
function setAttribute(obj){
var x=document.getElementById(obj);
x.onclick = function() { alert("nazdar.....") }
}
</script>
</head>
<body>
<input type="button" onclick="setAttribute('bla');"/>
<div id="inside">
<p id="bla">sdfsadfasdffasdfasdf dfdf</p>
</div>
</body>
</html>
Chamurappi
Profil
Reaguji na derhaaa:
Teď ses náhodou trefil do jména metody onoho <input>u. Takže setAttribute() uvnitř onclick vůbec nevolá tu výše uvedenou funkci. Pomůže její přejmenování.
derhaa
Profil
Chamurappi.... patri ti velky dik.... myslel sem si, ze javascript, i kdyz upovidane umim...... "no vim, ze nic nevim"..... nestarnouci rceni, no ale dost jiz toho "zvaneni".....:)
derhaa
Profil
no vida.... samozrejme, ze to po prejmenovani funguje... zde je pro dalsi, kdo hleda stejne reseni, kod:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
<script type="text/javascript">
function setAttr(obj){
var x=document.getElementById(obj);
x.onclick = function() { alert("nazdar.....") }
}
</script>
</head>
<body>
<input type="button" onclick="setAttr('bla');"/>
<div id="inside">
<p id="bla">sdfsadfasdffasdfasdf dfdf</p>
</div>
</body>
</html>
peta
Profil *
Chamurappi
mno, ja mam podobnou zkusenost s className. Proste ho to ignoruje a v generovanem kodu se to projevi prazdnym retezcem:
class=""

Na onclick, spatny, se to zas chova tak, ze poblikava kurzor, jakoby neukonceny cancelBuble.

Kdyz uz jsme u toho popisovani chyb :)
Chamurappi
Profil
Reaguji na derhaa:
Rádo se stalo.

Reaguji na petu:
mno, ja mam podobnou zkusenost s className
Nechápu. Prosím o ukázku kódu, který s nastavením vlastnosti className nefunguje.

Na onclick, spatny, se to zas chova tak, ze poblikava kurzor, jakoby neukonceny cancelBuble.
A tohle už vůbec nechápu.

Kdyz uz jsme u toho popisovani chyb :)
Ne, nyní jsme u mystifikace chyb.
peta
Profil *
Chamurappi :) Pardon :)
s className mam prave dobre zkusenosti, myslel jsem to tak, jak jsi psal, ze to setAtribute mi delalo problemi take. Ze je nas vic.

onclick nebo className, tam jsem to myslel podobne, ze kdyz se to spatne zapise, tak se to v nejakem prohlizeci projevuje tim, ze kurzor meni svuj tvar. Treba nad inputem preblikava text-cursor za arrow-cursor a vypada to tak, jakoby nebyl uzavren cyklus udalosti, tusim se to jmenuje cancelBuble.
Bohuzel si ted presny kod nevybavim, spatny kod jsem asi pred mesicem odstranil a tesim se skvele funkcnosti (mel jsem to na xatchat.sk/....portal/ po prihlaseni uvnitr chatu; jsem si totiz hral a puvodni chat predelaval na takovou verzi, ktera generuje vsechny veci pres skryty iframe a tam jsem prave vyuzival className a onclick na DOM. Jinak by v podstate to stacilo udelat pres innerHTML, to je celkem spolehlive.)
derhaa
Profil
tak sem s tim resenim pro inspiraci.... samozrejme jen tu cast o kt. mluvis.....
Taurendil
Profil *
k tomu xatchatu, docela rad, kdyz se o nem tak casto zminujes bych se na nej podival, jak vypada ci neco ale kdyz je nutne se tam pred seznamenim registrovat a nevedet co te ceka cloveku se vubec nechce.
nerikam to jako kritiku ale spis jen otazku proc tam nemuzes vstoupit jako divak, host nebo jakkoliv jinak nazvan
Taurendil
Profil *
pro presnost,seznameni s xatchatem
peta
Profil *
Taurendil :)
"kdyz je nutne se tam pred seznamenim registrovat"
Presne ma slovo, proto treba nemam rad jine chaty nez xko.cz a jine fora nez jakpsatweb, protoze treba pro interval se musis registroval.

Ale tohle ja neovlivnim, na tom chatu dela tech lidi vic a preji si to mit jinak.
Jsem kdysi delal seznamku a tam zadna registrace neni nutna...
http://www.volny.cz/peter.mlich/www.htm#mssub4
# PHP+MySQL dating
A o xat se zminuji proto, ze prave tam jsem ted resil spoustu JS problemku, ktere mne drive nevzrusovali a je to momentalni ma aktivita.
Mimo to mam v planu asi dalsich 20 ruznych veci, na ktere se mi moc nechce nebo nedostava cas nebo jsem se tam zasekl na nejake malickosti.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0