Autor Zpráva
nikos
Profil
Dobrý den.

Vážení,
začínám s AJAXem, napsal jsem první testovací stránku a nechodí mi jedna maličkost:
mám dva DIVy - v jednom tlačítka, druhý je prázdný, plní se po stisknutí jednotlivých tlačítek přes AJAX -> PHP -> HTML kódem <input id="InputXYZ">

Rád bych na tento <input> nastavil kurzor, což se mi nedaří - jakoby stránka čekala na doběhnutí JS funkce, která je v kódu tlačítka (a tím objekt Input ještě ve stránce neexistoval):
<button class="btn" title="AAA" onclick="return bmOpenDiv(1);">

V JS funkci proběhne korektně kód pro naplnění DIVu Inputem, ten se zobrazí, ale kurzor do něj nedostanu, ani když dám jako poslední příkazy JS funkce:
var prvek = document.getElementById("InputXYZ");
prvek.focus();

Dotazy:
1. vedlejší - kdy se obnovuje DIV na klientovi - až po doběhnutí funkce v onclick ?
2. hlavní - jak zajistit nastavení kurzoru (případně předvybrání obsahu) do nově zobrazeného Input pole ??

Díky moc !!

nikos
YOYO
Profil
pokud dobře chápu, ten div se ti naplní až po vrácení ajaxu ze serveru, takže ten fokus musíš volat na konci té návratové funkce,.. ale asi by to chtělo sem dát celý kus kódu, nebo líp živou ukázku

edit, možná jenom postačí do toho inputu přidat attribut autofocus, ale to asi nebude funkční ve všech browserech
nikos
Profil
YOYO:
na to se právě ptám - zda to běží asynchronně - tedy DIV na klientovi se obnoví bez ohledu, zda jsem ještě ve funkci JS nebo synchronně a naplní se až po jejím ukončení.
Ale v zásadě je to obecná otázka: Jak nastavit fokus do objektu v jiném DIVu (který v době stisknutí buttonu ještě neexistoval)
Kód jsem v podstatě napsal:
V 1. DIVu je button (viz kód výše), ten volá funkci JS (AJAX)
JS zavolá funkci PHP, která vrátí HTML a JS ho odešle do druhého DIVu (viz kód výše)
V druhém DIVu se objeví na zákaldě kódu INPUT, v němž bych chtěl mít nastaven kurzor (viz kód výše: <input id="InputXYZ"> )

Bohužel živá ukázka není možná, je to za registrační stránkou

nikos
YOYO
Profil
samozřejmě, že to běží asynchronně (co asi znamená to áčko v "AJAX"?) nemůžeš volat fokus elementu, který ještě neexistuje
možná bys sem mohl aspon napsat celou tu funkci která se volá po stisknutí buttonu,.. ten fokus musíš dát ne na konci ní, ale na na konci funkce, jež se volá s obdržením dat ze serveru,. prostě hned za to, kde vytváříš ten input,.. tedy bys tam měl mít něco, jako:

httpRequest.onreadystatechange= function () {
  if(httpRequest.readyState == 4 && httpRequest.status == 200){
    div.innerHTML="<input id=InputXYZ>"
    var prvek = document.getElementById("InputXYZ"); 
    prvek.focus();
  } 
} 
_es
Profil
nikos:
Ale v zásadě je to obecná otázka: Jak nastavit fokus do objektu v jiném DIVu (který v době stisknutí buttonu ještě neexistoval)
Všeobecne je riešenie jednoduché:
Zabezpečiť fokus elementu, o ktorý ti ide, až vtedy, keď existuje, teda najjednoduchšie: ihneď po jeho vytvorení naň dať fokus.
Darker
Profil
Docela pěkné se mi zdá tohle, i když to má o řádek navíc:
$.get("index.php", //adresa skriptu
{name:"value"},//GET promenne
function (navrat) { //navratova funkce
  var input=document.createElement("input");
  input.id="navrat";
  input.type="text";
  var div=document.getElementById("hu");
  div.appendChild(input);
  input.focus();
}
)

To by určitě fungovat mělo.
Edit:
Vyzkoušeno - funguje.
Chamurappi
Profil
Reaguji na Darkera:
i když to má o řádek navíc
… a o framework, který k AJAXu rozhodně není nutný. Přesně na tebe jsem si nedávno vzpomněl :-)
nikos
Profil
YOYO:
Skvělé - já to měl až v té volající funkci (viz Univerzální funkce pro AJAX), když jsem to dal sem, hned za naplnění innerHTML, tak to funguje přesně, jak jsem chtěl.
Díky moc a moje velká úcta !!!
nikos
Darker
Profil
Chamurappi:
Dík, tohle mě doteď nějak minulo. Fakt je, že na nic jíného jQuerry nepoužívám :D

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0