Autor | Zpráva | ||
---|---|---|---|
radecek Profil |
#1 · Zasláno: 24. 3. 2009, 23:54:58 · Upravil/a: radecek
Ahoj,
snazim se vytvorit naseptavac pro vyhledavaci pole. Vsechno vim jak udelat az na jednu drobnost, nechci psat: <input type="text" name="hledat" onclick="septej()"><div id="div_septej"></div> Ale pouze: <input type="text" name="hledat" onclick="septej()"> Takze potrebuju vytvorit nejak div, vychazim z teto funkce, kterou jsem si nasel na netu: function addElement(obj) { // create a new div element // and give it some content newDiv = document.createElement("div"); newDiv.innerHTML = "<h1>Hi there and greetings!</h1>"; // add the newly created element and it's content into the DOM my_div = document.getElementById(obj); document.body.insertBefore(newDiv, my_div); } Chtel bych aby se mi po zmene inputu vzdycky obnovil vytvoreny div. Samozdrejme kdyz dam do createElement do onkeydown vytvori se mi elementu zase hodne - to bych osetril podminkou jestli element neexistuje tak ho vytvor. Vytvorit ho umim, ale nedokazu ho vytvorit ve funkci naseptavace. Kod ktery funguje jak ma vytvari nove divi vzdy po zmackniti klavesi: <input type="text" name="hledat" onkeydown="addElement(this.id)"> Takhle bych si to nejak predstavoval: function septej(input) { input.style.color = input.style.color == "red" ? "black" : "red"; //kontrola funkcnosti JS if (input.value){ addElement(input.id); //funkce na pridani elementu send_to("kuk", "/ajax/sept.php?v="+input.value, true); //ajax.. } else { document.getElementById("kuk").innerHTML = ""; } } ... <input type="text" name="hledat" onkeydown="septej(this)"> Chybu kterou mi hlasi FF debuger: Chyba: uncaught exception: [Exception... "Node was not found" code: "8" nsresult: "0x80530008 (NS_ERROR_DOM_NOT_FOUND_ERR)" location: "http://localhost/javascript/ajax.js Line: 55"] Dekuji za vasi odpoved |
||
Joker Profil |
#2 · Zasláno: 25. 3. 2009, 11:00:06
radecek
1. Tomu <div>u se ve funkci addElement nikde nenastavuje ID, takže getElementById ho pak nenajde. 2. Já bych to udělal tak, že bych ten <div> vygeneroval skrytý třeba po načtení stránky a potom ho jen zobrazoval/skrýval a nastavoval mu nějaký obsah. |
||
Chamurappi Profil |
#3 · Zasláno: 25. 3. 2009, 11:45:30
Reaguji na radecka:
Na první pohled mi připadá jako nesmysl zjišťovat ID elementu, který mám v this, toto ID předávat funkci a v ní pomocí document.getElementById opět dohledávat ten element, který jsem měl v this. Smysluplnější verze: <input type="text" name="hledat" onkeydown="addElement(this)"> function addElement(my_div) { newDiv = document.createElement("div"); newDiv.innerHTML = "<h1>Hi there and greetings!</h1>"; document.body.insertBefore(newDiv, my_div); } |
||
radecek Profil |
#4 · Zasláno: 25. 3. 2009, 14:07:33
Chamurappi
Bohuzel toto nejde.. Error: Error: uncaught exception: [Exception... "Node was not found" code: "8" nsresult: "0x80530008 (NS_ERROR_DOM_NOT_FOUND_ERR)" location: "file:///C:/Documents%20and%20Settings/Radek/Plocha/naseptavac/js.js Line: 6"] // JavaScript Document function addElement(my_div) { newDiv = document.createElement("div"); newDiv.innerHTML = "<h1>Hi there and greetings!</h1>"; document.body.insertBefore(newDiv, my_div); } ... This: <input type="text" name="hledat1" onkeydown="addElement(this)" id="neco1"><br> Get: <input type="text" name="hledat1" onkeydown="addElement(document.getElementById('org_div1'))" id="neco1"> Pres GET to jde, pres this uz ne, chyba je vyse. |
||
Chamurappi Profil |
#5 · Zasláno: 25. 3. 2009, 15:49:46
Reaguji na radecka:
„Pres GET to jde, pres this uz ne“ Problém není v parametru, ale v té funkci. Říkáš v ní, že se má nový <div> přidat do <body> před něco. Pokud tohle něco není přímým potomkem <body>, vyskočí výjimka. Chceš-li dát nový <div> před element předaný v argumentu, ať je kde je, uprav funkci takto: function addElement(my_div) { newDiv = document.createElement("div"); newDiv.innerHTML = "<h1>Hi there and greetings!</h1>"; my_div.parentNode.insertBefore(newDiv, my_div); } |
||
radecek Profil |
#6 · Zasláno: 25. 3. 2009, 16:22:11 · Upravil/a: radecek
Funguje to :) Diky moc. Jeste prosim jak by se dalo nastavit na input vlasnost onkeydown, pres nejakou JS funkci?
|
||
Chamurappi Profil |
#7 · Zasláno: 26. 3. 2009, 00:10:18
Reaguji na radecka:
document.getElementById("ídéčko").onkeydown = function() { addElement(this); }; document.jménoFormuláře.jménoPrvku.onkeydown = function() { addElement(this); }; |
||
radecek Profil |
#8 · Zasláno: 26. 3. 2009, 09:51:27
Tak uz vsechno funguje jak ma, ale stejne se mi nelibi jedna vec div se vygeneruje v kodu pred input. Chtel bych ho posunout za nej.
<div></div><input /> //mam <input /><div></div> //chci Existuje nejaka metoda insertBihind? Bohuzel jsem nic takoveho nanasel. Nebo jak toto zastilovat bohuzel float mi fungovalo jen v opere tak jak bych chtel.. |
||
Chamurappi Profil |
#9 · Zasláno: 26. 3. 2009, 11:59:31
Reaguji na radecka:
Můžeš zjistit následujícího sourozence elementu a dát nový <div> před něj: my_div.parentNode.insertBefore(newDiv, my_div.nextSibling); |
||
Časová prodleva: 15 let
|
0