Eventi blur, focus na svim elementima?

Kako vam se čini mogućnost da možete bilo kojeme elementu dodjeliti evente:

onfocus, onblur, onkeydown, onkeyup …i da ih možete uredno bindat i unbindat s pripadajućem event ID-om?

Ima li to jQuery rješeno?

Ima i jQuery i JavaScript

Šta stvarno mogu u Javascriptu trigirati na img ili recimo div element, event onblur ??

Možeš ukoliko ti elementi imaj tabindex atribut.

window objekt, svi linkovi , form polja i elementi s tabindex atributom mogu koristiti navedene evente.

Pa znam se to može :slight_smile: …sad se možemo vratiti na moje pitanje…

…ukoliko nisam propustio mogućnost da se bilo kojem elementu dodjeli tabindex…te tako da počme registrirati spomenute evente.
Inače, što podrazumjevam pod focus i blur nekog npr. div elementa .
Focus bi bio klik mišem na element…i to samo dok element nema već fokus.
Blur bi se trigirao elementu dok se klikne bilo gdje mišem na stranici, ukoliko element ima fokus. S time da je optional parametar da se zadani div element može proširiti sa nekim elementima koji nisu njegova childNodes struktura, i koji mu neće trigirati blur event.

onkeydown bi bila pritisnuta tipka za vrijeme dok je element pod fokusom
onkeyup je analogno gornjem…s očiglednom razlikom key up i key down

Primjena recimo: Neki element na onclick event otvara neki popUp…a taj popUp želite ugasiti na blur tog elementa, s time da element proširite s popUp-om kako popUp na onclick nebi trigirao blur zadanom elementu.
Vjerujem da primjene ima još hrpa. Nebi se trebale koristiti hidden input forme za čuvanje fokusa. Ja sam inače neke stvari s tim radio…pa su te hidden forme na mobitelima uključivale virtualnu tipkovnicu kad se to od njih nije tražilo…

Nakraju sam si složio gornje evente i rade odlično.
Pozivi idu slično kao kod jQuery-a…samo sam funkcije dodao u HTML element prototype, a evente nazvao Bevent.
Tipa…dodavanje i uklanjanje eventa:

Div.Bevent('blur.proizvoljanID',function(){},[optionalExtendElements]) ;  //dodavanje eventa
Div.unBevent('blur.proizvoljanID') ;              //brisanje eventa
Div.getBevent('blur.proizvoljanID') ;             //dohvaćanje eventa.

No još stignem odustati od svog Beventa ako se pokaže da izmišljam toplu vodu :smile:

Tabindex:
http://www.w3schools.com/tags/att_global_tabindex.asp

In HTML5, the tabindex attribute can be used on any HTML element (it will validate on any HTML element. However, it is not necessarily useful).

Znaci na sve elemente mozes staviti tabindex, a onda samim time i sve evente na sve elemente. Izmisljas toplu vodu…ponovno.

Nisam to znao…zato i pitam :wink:

…al opet, probao sam sad nekom random elementu dodati tabindex sa setAttribute…dodao sam mu evente na onblur i onfocus…i trigiraju se oba eventa nakon što kliknem na taj element…hmm…

Također sam vjerovatno ograničen zaustaviti zadanom elementu blur, sa nekim drugim elementom koji nije njegov childNodes…

Nesto krivo radis. Osim toga uopce mi nije jasno sta pokusavas. Imas li nekakv konretan zadatak. Cinis mi se kao netko tko je dobio neki komad novog alata i sada sa tim jednim alatom pokusava sve popraviti i napraviti, ili kao dijete kada dobije novu igracku pa sve ostale ne postoje i padaju u zaborav. Ako bi nesto trebao malo koristiti na stanici ,a o nda je to Javascript.

Daj konkretan problem i li zadatak i vidjet cemo koja se rijesenja i solucije nude.

Jedna od primjena…no ne radim neku specifičnu stvar…uvijek gledam da mi alatići budu generalno korisni.

Pa to je bar jednostavno, npr. imas dvije mogucnosti ugasi popup na onmouseleave event ili na document onclick event. U prvom slucaju ce se popup ugasiti cim se misem maknes s njega, a u drugom nakon sto si negdje na stranicu kliknuo misem,

Ako popUp nije dio childNodes-a od elementa koji controlira popUp, onda moseleave neće dopustiti korisniku da radi sa mišom po popUp-u. Osim toga, ovaj način niti nije funkcionalno ista stvar.

A onclick event će također fulati ukoliko popUp nije u childNodes strukturi. S druge strane se event trigira bespotrebno na svaki document click…a da se to izbjegne, onda bi se opet moralo taj event u pravo vrijeme dodljelivat preko control elementa…i uklanjat. …što je kompliciranije.

Daj mi objasni o kakvim childNodes ti tu pricas.

Pa svakom elementu mozes pristupiti sa document.getElementsByTagName ili document.getElementsByClassName ili sta ti vec pase, a onda svakom od tih elemenata mozes dodati i event.

var e = document.getElementById('trtmrt');
e.addEvent('blabla', itd. itd.)

Pa to je sve vec rijeseno u Javascriptu, jer da nije ti se nebi imao sa cim igrati. :wink:

Pa cijeli razvoj programskih jezika se sastoji od toga da od postojećeg skupa funkcija, nastaju kompleksnije

Pa neki element je nekom u childNodes, ako se nalazi unutar tog elementa. U njegovoj strukturi…dio vrijednosti tog elementa, kao što CSS može biti dio vrijednosti HTML taga <style> :smile: (Još čekam tvoje obećanje da mi objasniš da to griješim)

<div>
      <span></span>
      <span><br></span>
</div>

…i spanovi i br su dio childNodes strukture diva. Mislio sam da je to jasno.

Ako ti popUp nije u takvoj relaciji sa control elementom, djabe ti onmouseleave …i document.onclick.
U prvom slučaju miš neće moći doći do popUp-a, u drugom neće moći klikati po popUp-u.
To se sve naravno da iskemijati…ali jednostavnije je imati jedan onblur event.

No to nisu sve mane takvom keljenju evenata. Jer evente treba pravovremeno dodjeliti …i pravovremeno ukloniti. (Osim ako ih trebamo stalno)

Koliko sam skuzio sto ti zelis rec jest da na onmouseleave nemozes ukolnit popup ako on nije child tog nekog elementa? Ako sam dobro skužio onda je ovo pričanje gluposti vol.2

Ne, nego to često nije interes.
Recimo nakon što je korisnik otvorio popUp preko tog control elementa…on želi mišom ići nešto raditi po popUp-u…i klikat po popUp-u.
mouseleave mu to nebi dopustio. …jer kako će mišem napustiti control element.
document.onclick mu također mu to nebi dopustio…jer kako će klikat po popUp-u. ( bez da se izvode dodatne kerefeke kod slaganja event-a )
A umjesto da se izvode dodatne kerefeke…odličan je onblur event za control element. I to onblur koji se može extendat sa željenim elementima. U ovom slučaju to je popUp. Nakon što se control element extenda sa popUp-om pri zadavanju onblur eventa, neće se trigirati onblur event kad korisnik klikne na popUp. Što će dopustiti korisniku klikanje po popUp-u.

Inače…mouselevae je i userfriendly drugačije rješenje…nekad je poželjno nekad ne. Ja sam ga svjestan i sam bi ga ubacio u temu da je o tome riječ :wink:
No i kad se koristi onmouseleave, javljaju se slični problemi. (ukoliko nije popUp u childNodes control elementu)
Također ne želimo da se popUp gasi nakon što korisnik na milisekund izleti iz popUp prozora, ukoliko je namjenjeno da se nešto korisno radi unutar popUp-a. Tu opet ima igre i kerefeka da se to složi…i jednostavnije je imati poseban event koji brine o tome. Imam i takav koji dobro služi već godinama :smiley: (Iako se vjerovatno i jQuery pozabavio tim problemima)

Gledaj ocito se ne kuzimo ili sam ja glup pa nemam pojma o cemu pricas.
Kakv control element, tvoj element s kojim si otvorio popup nema nikakve veze sa popupom.

<div>
<img src="test,jpg" alt="ne znam ni ja" onclick="openPopup" > 
</div>

negdje dalje u kodu se otvorio popup,

<div class="popup" onmouseleave="zatvorise">
nekakv content
</div>

i sad tom elementu dodas event mouseleave i kakve veze sad ima conrolelement??? sa ovim popupom? nikakve, jer taj element uopce nije u sastavu tog diva i te slike na koju si ti stavio event da se otvori popup, a i jedan i drugi su djeca documenta i oba su postoje u DOM.

I naravno po tom popupu mozes klikati koliko kod hoces sve dok ne napustis taj popup s misem, onda ce se zatvoriti, a onda mozes zakaciti event na onclose popup da ti to sto si pokliko ajaxom negdje spremi ili da okine neki drugi event.

Kako rekoh petljas i brljas i izmisljas toplu vodu tamo di je ne treba izmisljati. I stvrano bi koristio jedan konkretan primjer ili zadatak, a ova apstraktna razmisljanja treba ostaviti za teoreticare i filozofe.

P.S. I daj Boga ti reci mi na kojim si drogama da ih si i ja malo nabavim.

Naravno da bi mu dopustio, jer si zakacio event mousleave na popup, a ne na element s kojim si ga otvorio.

Nema tu nikakvih dodatnih kerefeka.

Koje ne treba izvoditi zato što nema potrebe…

Koji je malo drugaciji nego onmouseleave odnosno da budemo precizniji onmouseout.

To je event i kako se event moze extendat sa elementima?

control element??? sta ti je to?
onblur je kada element izgubi fokus. kako mislis extendat sa popupom??? i to jos pri gubljenu fokusa.

Pa nece niti ovako, jer u onom trenutku kada ti otvoris popup u ovom primjeru onda taj popup preuzima prvo mjesto na povrsini i tvoja kontrola nema mogucnosti dobiti niti fokus niti ga izgubiti.

Vidim ja da te jebe malo struktura i logika DOM, bas kao i HTML i CSS.

Dopustit ce svakako s bilo koji eventom i fakat nemas potrebe raditi neke svoje cudne evente i ekstenzije za ove, rekao bih trivijalne i bazicne stvari.

Dalje mi se neda 55 puta citati jedno te isto kako bih uopce pokusao shvatiti djelic onoga sto si htio napisati i zato ti ponavljam jos jednom Real Life zadatak ili primjer onoga sto zelis rjesiti.

A što će napraviti tvoj popUp.onmouselevae , ako ga korisnik niti ne posjeti mišem? Ništa…

Ali da ne crtam…ponovit ću još jednom: onmouseleave…i onblur nisu funkcionalno ista stvar. Pusti onmouseleave kraju, molim te :slight_smile:

Konkretan primjer:
Uvod: klik na x element otvara y element.
Zadatak: Kako najelegantnije napraviti da nakon što je y element otvoren, da klik na bilo što na stranici osim na x ili y, zatvara y element.

Moja solucija: onblur event. I to ne običan…nego da se prilikom zadavanja blur eventa nekom elementu…taj element može extendat sa nekim dodatnim elementima. Extendani elementi dobivaju ulogu da ne oduzimaju fokus elementu kojem je dodjeljen blur event.

Da to lakše shvatiš, makar sam već opisao gore…to je nešto što već postoji u ugrađenim elemntima HTML-a…tipa imaš element <select></select> i unutra neke opcije. Kad se klikne na listu opcija neće biti oduzet fokus elementu select.
To je i prirodno…jer su optioni djeca selecta. No ovdje extend radi upravo to…pretvara se da je neki element dijete nekom elementu, kako mu nebi oduzelo fokus.

Sad kad imamo takav blur event…rješenje gornjeg problema je vrlo jednostavno:

x.Bevent('blur',function(){off(y)},[y]);  //uglata zagrada je optional parametar...lista extendElemenata

ili

y.Bevent('blur',function(){off(y)},[x]);

Molio bih tvoju soluciju rješenja problema…ako imaš jednostavniju od navedene

Vrlo jednostavno!
Nakon što se popUp otvorio staviš click event na document i onda u njemu provjeriš recimo dali se pozicija miša nalazi unutar tog popUpa ili pomoću e.target provjeriš na koji je element kliknuto i ako je bilo koji element unutar popUpa (ili sam popUp) nećeš uklonit popUp

…i da nebi okidao evente u prazno, treba i nakon gašenja popUp-a ukloniti taj event.
To sve može odradjivat jedan onBlur event…umjesto da se za svaki “blur” piše logika. Iako jednostavna logika…no programiranje se valjda svodi na to da se isti code nikad ne ponavlja na više mjesta…
i još k tome je “lijepo” kad se ima kontrola nad eventima preko eventID-a…