Autor Zpráva
cenek
Profil
Ahoj,

S JS si hraju pomerne chvili ale ted jsem v koncich a at googim jak googlim, nemuzu to najit.

Mam ve formulari pole headline. Pomocí JS jsem do dalšího inputu "obtisknul" cool url z výrazu headline. Pro příklad: Do pole headline zadám "Bude pršet" a inputu coolurl se mi objeví "bude-prset". To funguje.

Jenže o pár řádek níže posílám (na té samé stránce v tom samém formuláři) nějaká data přes ajax do jiného souboru s php a já tam do jedné var potřebuju dostat hodnotu co je právě v tom coolurl

var coolurl = document.getElementById('coolurl').value;

ale protože tam ta hodnota není napevno a objeví se vlastně až v průběhu vyplňování toho formuláře, proměnná je prázdná.

Neví někdo jak se to dá řešit?
Díky
Monkeys
Profil *
cenek:

if($(coolurl).empty()){
// nieco vykonaj
}else{
/nieco vykonaj
}

M.
_es
Profil
cenek:
Akosi nechápem, v čom spočíva problém. Tak teda tú hodnotu prečítaj až vtedy, keď je v v inpute s id=coolurl to, čo tam má byť. Alebo, odkiaľ pochádza hodnota do toho inputu vkladaná? - Použi hodnotu odtiaľ.
cenek
Profil
_es:
Potřebuju aby když se hodnota z headline objeví v coolurl (coz je realtime, bez submitu, tudiz nemuzu pouzit PHP jak rika Monkeys) aby se rovnou "prdla" i do var coolurl v JS niz


Takto se mi objeví v inputu coolurl

<script type="text/javascript">
var nodiac = { 'á': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'ě':'e', 'í': 'i', 'ň': 'n', 'ó': 'o', 'ř': 'r', 'š': 's', 'ť': 't', 'ú': 'u', 'ů': 'u', 'ý': 'y', 'ž': 'z' };
function make_url(s) {
s = s.toLowerCase();
var s2 = '';
for (var i=0; i < s.length; i++) {
s2 += (typeof nodiac[s.charAt(i)] != 'undefined' ? nodiac[s.charAt(i)]
: s.charAt(i));
}
return s2.replace(/[^a-z0-9_]+/g, '-').replace(/^-|-$/g, '');
}
function prevod()
{document.getElementById("coolurl").value=make_url(document.getElementById("headline").value);}
</script>

<input type="text" name="headline" id="headline" onkeyup="prevod()" />
<input type="text" name="coolurl" id="coolurl"  />
_es
Profil
cenek:
Stále nerozumiem:
var coolurl = document.getElementById('coolurl').value;
ale protože tam ta hodnota není napevno a objeví se vlastně až v průběhu vyplňování toho formuláře, proměnná je prázdná.
No kedy a ako tú hodnotu zisťuješ? Tak ju teda zisťuj, keď ten input nie je prázdny. Asi máš len nejako chaos v tom, kedy sa ti aké kroky vykonajú. Alebo prečo nepoužiješ hodnotu z inputu s id=headline a funkciu make_url namiesto hodnoty z inputu s id=coolurl na to odoslanie „nějakých dat přes ajax do jiného souboru s php“? A tá definícia premennej coolurl je kde?
cenek
Profil
_es:
var coolurl = document.getElementById('coolurl').value;
Takto získám hodnotu (value) z inputu id=coolurl, pokud v něm něco je. Tedy rozumnějme pokud by se stránka nenačetla s prázdným formulářem.

Jenže moje stránka se načte s prázdným formulářem. Lepší bude, když zapomene na input id='coolurl'. Řekněme že vyplním jen input id='headline' a a potřebuji aby ve chvíli kdy ho vyplnim se hodnota value tohoto pole projevila v JS var ještě před odesláním / zpracováním formuláře
_es
Profil
cenek:
Vyrob „živú“ ukážku, lebo z tvojho popisu problému sa asi nikto „nevysomári“.

se hodnota value tohoto pole projevila v JS var
To má byť čo, to „prejavenie sa v JS var“? Ak v tom inpute nejaký text je, tak môžem zistiť aký. Zrejme zisťuješ hodnotu z toho inputu vtedy, keď v ňom text nie je.
cenek
Profil
Zkusím to popsat na zjednodušeném kódu, který by měl stačit, protože jsem to možná na začátku tohoto tématu zbytečně komplikoval. Kdyžtak zítra udělám nějakou živou ukázku.

Takže teoreticky:

<form>
<input type="text" name="headline" id="headline" value="sem potřebuji dostat text zadaný do tohoto inputu" />
<script>
  var headline=$('#headline').val(); // Tímto dostanu hodnotu z inputu headline
  .......... //zbytek skriptu
</script>
<input type="submit" value="submit"/>
</form>

Takže vlastně potřebuji najít způsob jak v realném čase bez načítání stránky dostat hodnotu, kterou napíšu do inputu headline do value tohoto samého inputu a tím pádem i do js
_es
Profil
cenek:
<form onsubmit='Tu zadaj nejaký kód pracujúci s výrazom make_url(document.getElementById("headline").value)'

Do pole headline zadám "Bude pršet" a inputu coolurl se mi objeví "bude-prset".
Prečo? Na čo to je návštevníkovi?

Čo ak sa do inputu zadajú nejaké exotickejšie znaky? Nepotrebuješ skôr funkciu encodeURIComponent?

Tímto dostanu hodnotu z inputu headline
... v čase vytvárania stránky - teda ti to je na nič. Potrebuješ získať jeho hodnotu v inom čase.

Ten formulár je odoslaný ako? Ako normálny formulár, či nejakou JS náhradou?

Alebo, prečo vlastne nepracuješ s hodnotou z inputu s name=headline až na serveri?

Nejako moceš jedno cez druhé a vkladáš tu nejaké vzájomne nekompatibilné kódy:
kterou napíšu do inputu headline do value tohoto samého inputu a tím pádem i do js
Teda doteraz si písal o dvoch inputoch a zrazu je z nich len jeden? Bez „živej“ ukážky nemá zmysel na to viac reagovať.
cenek
Profil
Přiznávám, že jsem to na začátku mohl napsat jednodušeji. Pole coolurl zapomeňte, je tam proto, že když se zadá název položky, vytvoří se tak rovnou unikátní identifikátor pro danou položku (samozřejmě přes ajax nejdřív kontroluji jeho unikátnost), návštěvníkovi je k ničemu, může být schovaný. To funguje, proto zrazu zmiňuji jen jeden.

Fomulář se zpracovává klasicky.

Zkusím to ještě vysvětlit jinak. Po lopatě. Mám formulář. Do tohoto formuláře uživatel zadává položky. V průběhu tohoto formuláře uživatel zadává fotografie, keteré se ještě před odesláním celého formuláře přes ajax nahrávají na server a ukládají do tabulky 'photos'. to taky funguje. Ale potřebuju aby se do té tabulky photos uložil i zmiňovaný identifikátor, proto ho potřebuji dostat "real-time" z toho pole právě do skriptu s ajaxem. A až poté celý formulář odeslat ke zpracování na server.

Ale to jen tak pro informaci, budu radši hledat jiné řešení
_es
Profil
cenek:
Pole coolurl zapomeňte, je tam proto, že když se zadá název položky, vytvoří se tak rovnou unikátní identifikátor pro danou položku (samozřejmě přes ajax nejdřív kontroluji jeho unikátnost), návštěvníkovi je k ničemu, může být schovaný.
A na čo tam vôbec to „pole coolurl“ je? Veď stačí normálne odoslať na server to, čo návštevník napíše.

fotografie, keteré se ještě před odesláním celého formuláře přes ajax nahrávají na server
AJAX, respektíve to, čo je pod tým obvykle myslené - objekt XMLHttpRequest, neumožňuje nahrávať súbory. Súbory sa odosielavajú normálne cez formulár, prípadne cez nejaké rozšírenia prehrávača.

proto ho potřebuji dostat "real-time"
Ako „real-time“? Výraz objektInputu.value obsahuje hodnotu toho inputu. Akú inú „real-time“ hodnotu by si ešte chcel? Samozrejme ju musíš zisťovať v správnom čase a nie ako v [#8].
pcmanik
Profil
_es:
objekt XMLHttpRequest, neumožňuje nahrávať súbory
Špecifikácia XMLHttpRequest 2 už umožnuje nahrávať aj súbory a podpora je už na celkom slušnej úrovni, samozrejme bez IE < 10
_es
Profil
pcmanik:
Čiže je tá podpora nedostatočná.
Okrem toho ide v tomto vlákne o iný problém a o to, že ho cenek dostatočne neobjasnil.
peta
Profil
cenek:
Pouzij iframe ajax. Do iframe das formular pro zadani souboru. Uzivatel si ho vyklika pres browse (prochazet). Ty mu pak ten formular odesles, on se obnovi a pri obnove pomoci php vygeneruje javascript typu
<script>parent.document.form[0].prom.value = 1234;</script> (pomoci js prepises v parent okne value inputu prom formulare form[0]).

" fotografie, keteré se ještě před odesláním celého formuláře přes ajax nahrávají na server a ukládají do tabulky 'photos'. to taky funguje."
To mi neni jasne. Kdyz je ajaxem nahrajes, tak ajaxem muzes navratit i hodnotu. Takze, pokud ti to funguje tam, tak cesta zpet je preci jen spustit funkci na ajax.response. Cili, vygooglovat si vic o tve funkci, kterou pouzivas na ajax. Moznosti je vic. Z toho, co pises, neni jasne, zda pouzivas XMLHttpRequest nebo neco jineho. Mozna fakt tu live ukazku.

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: