znaczacy > comp.lang.* > comp.lang.javascript

Jivanmukta (15.03.2017, 07:20)
Mam na stronie:

<div id="client_mobile_field">
<div class="label"><label class="obligatory">Telefony
komórkowe:</label></div>
<div class="control">
<div>
<?php echo my_form_input('client_mobile1',
my_set_value('client_mobile1', $fullAnnouncementNo, $announcement),
'id="client_mobile1" maxlength="16" size="16" style="width: 16ex"
class="mobile" onfocus="onFocusElement(this.id);"
onblur="onBlurElement(this.id);"'),
form_error('client_mobile1'); ?>
</div>
<div>
<?php echo my_form_input('client_mobile2',
my_set_value('client_mobile2', $fullAnnouncementNo, $announcement),
'id="client_mobile2" maxlength="16" size="16" style="width: 16ex"
class="mobile" onfocus="onFocusElement(this.id);"
onblur="onBlurElement(this.id);"'),
form_error('client_mobile2'); ?>
</div>
</div>
<div class="tip">...<b>albo</b> telefon komórkowy
(9-cyfrowy)...</div>
</div>

Podczas obslugi zdarzenia onfocus elementu client_mobile1 potrzebuje
dobrac sie do jedo etykiety. Robie to tak:

function divLabelOf(elem) {
if (elem) {
var p = elem;
while (p.className != 'control') {
p = p.parentNode;
}
p = p.parentNode;
alert("div " + p.id);
alert("firstChild " + p.firstChild.id);
alert("childNodes[0] " + p.childNodes[0].id);
return p.firstChild; // powinno byc div
}
return null;
}

Wyswietla mi sie:

div client_mobile_field
firstChild undefined
childNodes[0] undefined

Dlaczego undefined? Jak poprawic funkcje divLabelOf? Bylbym wdzieczny za
podpowiedz.
Cezary Tomczyk (15.03.2017, 10:45)
On 15/03/2017 06:20, Jivanmukta wrote:
[..]
> childNodes[0] undefined
> Dlaczego undefined? Jak poprawic funkcje divLabelOf? Bylbym wdzieczny za
> podpowiedz.


Sprawdz, jaki obiekt kryje sie pod p.firstChild. Moze zamiast
p.firstChild uzyj q.querySelector('tutaj CSS selector do zadanego
elementu').

A poza tym, zrezygnuj z onfocus i onblur inline i skorzystaj z delegacji
zdarzen (event delegation):

Jivanmukta (15.03.2017, 15:31)
W dniu 2017-03-15 o 06:20, Jivanmukta pisze:
> Mam na stronie:
> ...
> Dlaczego undefined? Jak poprawic funkcje divLabelOf? Bylbym wdzieczny za
> podpowiedz.


Poradzilem sobie:

function divLabelOf(elem) {
if (elem) {
var p = elem;
while (p.className != 'control') {
p = p.parentNode;
}
p = p.parentNode;
return p.childNodes[1]; // div
}
return null;
}

bo przed divem byl pusty tekst co tez sie liczy jako childNodes.
zpksoft (15.03.2017, 17:29)
W dniu sroda, 15 marca 2017 09:45:26 UTC+1 uzytkownik Cezary Tomczyk napisal:
[..]
> - walidacja Accessibility
> Blokowanie automatycznego odtwarzania video na gazeta.pl w Google
> Chrome:


Spodobalo mi sie to w art. do którego dales link:

<cytat>
1. Podstawowy sposób dodawania nasluchów
$(document).ready(function() {
$('.clickable-div').click(nasluch_1);
});
//rownowazny zapis
$(document).ready(function() {
$('.clickable-div').click(nasluch_1);
});
</cytat>

:-)

Pawel
zpksoft (15.03.2017, 17:38)
W dniu sroda, 15 marca 2017 09:45:26 UTC+1 uzytkownik Cezary Tomczyk napisal:
[..]
> - walidacja Accessibility
> Blokowanie automatycznego odtwarzania video na gazeta.pl w Google
> Chrome:


Dodam jeszcze ze niezbyt inteligentny jest ten kod. Po co tak motac prosty sznurek?

Przeciez wystarczy napisac:

document.onclick = function(e){

e = e || window.event;
var t = e.target || e.srcElement;
n=t.id || t.className;
if (!n) return;
//i teraz obsluga naszej aplikacji:

if (n=='id_diva1') {...}
else if (n=='id_elementu_span1') {...}
else ...

Ot i cala filozofia. Jezeli dynamicznie wczytamy jakis element np. div o okreslonym id albo nadamy mu dynamicznie id, albo bedziemy chcieli obsluzyc dowolny element danej klasy to kod bedzie dynamicznomagicznie dzialal.

Pawel
Cezary Tomczyk (15.03.2017, 21:50)
On 15/03/2017 14:31, Jivanmukta wrote:
[..]
> return null;
> }
> bo przed divem byl pusty tekst co tez sie liczy jako childNodes.


Zainteresuj sie firstElementChild:
Borys Pogorelo (16.03.2017, 01:54)
Dnia Wed, 15 Mar 2017 08:38:08 -0700 (PDT), zpksoft napisal(a):

> Dodam jeszcze ze niezbyt inteligentny jest ten kod. Po co tak motac prosty sznurek?


On przede wszystkim jest przestarzaly, to artykul sprzed blisko 7 lat.
Wszystkie uzyte tam funkcje juz dawno zostaly zastapione.

> Przeciez wystarczy napisac:
> document.onclick = function(e){
> e = e || window.event;
> var t = e.target || e.srcElement;
> n=t.id || t.className;
> if (!n) return;
> //i teraz obsluga naszej aplikacji:
> if (n=='id_diva1') {...}
> else if (n=='id_elementu_span1') {...}
> else ...


Po to sie uzywa frameworków, by nie klepac recznie calego tego smietnika.

> Ot i cala filozofia. Jezeli dynamicznie wczytamy jakis element np. div o okreslonym id albo nadamy mu dynamicznie id, albo bedziemy chcieli obsluzyc dowolny element danej klasy to kod bedzie dynamicznomagicznie dzialal.


jQuery.on() tez tak dziala. Stare jQuery.delegate() równiez.
zpksoft (16.03.2017, 09:49)
> > Przeciez wystarczy napisac:
> Po to sie uzywa frameworków, by nie klepac recznie calego tego smietnika.
>ciach> --
> Borys Pogorelo
> borys(#)leszno,edu,pl


Punkt widzenia.
Ja to widze inaczej. Zeby nie pisac tych kilku linijek kodu mam dolaczyc caly framework? To jest dopiero smietnik z tysiacem linijek zbednego kodu.

Pawel
rePeter (16.03.2017, 13:09)
Thu, 16 Mar 2017 00:49:40 -0700 (PDT)
zpksoft <zpksoft> napisal(a):


> Ja to widze inaczej. Zeby nie pisac tych kilku linijek kodu mam dolaczyc caly
> framework? To jest dopiero smietnik z tysiacem linijek zbednego kodu.


Mialbys racje, gdyby kod konczyl sie na tych kilku linijkach i potrzebowal jednej czy
dwóch funkcjonalnosci. Ale to juz raczej nie te czasy.
zpksoft (16.03.2017, 15:52)
W dniu czwartek, 16 marca 2017 12:09:56 UTC+1 uzytkownik rePeter napisal:
> Thu, 16 Mar 2017 00:49:40 -0700 (PDT)
> zpksoft napisal(a):
> Mialbys racje, gdyby kod konczyl sie na tych kilku linijkach i potrzebowal jednej czy
> dwóch funkcjonalnosci. Ale to juz raczej nie te czasy.
> --
> Piotr Grzegorzyca pozdrawia
> jedenaste: Nie spamuj


Nie te czasy powiadasz? Dobrze ze dodales "raczej".
Obserwuje notoryczne wytaczanie armat na wróble. Na stronach nic sie nie dzieje a dolaczonych "frameworków" bez liku "botak wyglada profesjonalnie".

Niech kazdy mysli po swojemu. Tak jest ok. Czasami korzystam z procedur znalezionych w necie robiacych ciekawe rzeczy. Reszta jest tak prymitywnie prosta ze nie mialem jeszcze potrzeby stosowania np. jquery. A pisze aplikacje biznesowe o róznorodnych funkcjach..

Pawel

dwunaste: Mysl samodzielnie
rePeter (16.03.2017, 16:07)
Thu, 16 Mar 2017 06:52:06 -0700 (PDT)
zpksoft <zpksoft> napisal(a):

> W dniu czwartek, 16 marca 2017 12:09:56 UTC+1 uzytkownik rePeter napisal:
> > Thu, 16 Mar 2017 00:49:40 -0700 (PDT)
> > zpksoft napisal(a):


> > --
> > Piotr Grzegorzyca pozdrawia
> > jedenaste: Nie spamuj


> Obserwuje notoryczne wytaczanie armat na wróble. Na stronach nic sie nie dzieje a
> dolaczonych "frameworków" bez liku "bo tak wyglada profesjonalnie".


To druga skrajnosc.

> dwunaste: Mysl samodzielnie


Trzynaste: Tnij sygnatury ;-)
(w zasadzie czytnik powinien)
PawelS cbrbob(at)wbcd(dot)pl (17.03.2017, 21:21)
zpksoft pisze:
> W dniu czwartek, 16 marca 2017 12:09:56 UTC+1 uzytkownik rePeter napisal: [...]
> Nie te czasy powiadasz? Dobrze ze dodales "raczej".
> Obserwuje notoryczne wytaczanie armat na wróble. Na stronach nic sie nie dzieje a dolaczonych "frameworków" bez liku "bo tak wyglada profesjonalnie".

W rzeczy samej, równiez dolaczam sie do powyzszego,
ale w nieco innym aspekcie unikania stosowania frameworków:
dzieciaki korzystajace z ton frameworków podsluchaly
i nauczyly sie od kogos magicznego: SOA # 1
niestety, nie wszedzie zawsze mozna miec naj.. naj... najnowsza przegladarke,
czego stety efektem jest, ze strona nie wyswietla sie prawidlowo,
bo jquery dziala tylko u twórcy na jego jedynej slusznej przegladarce
(oraz calej podobnej do twórcy rodzinie).
Wojciech Bancer (17.03.2017, 23:04)
On 2017-03-16, zpksoft <zpksoft> wrote:

[...]

>> jedenaste: Nie spamuj

> Nie te czasy powiadasz? Dobrze ze dodałeś "raczej".
> Obserwuję notoryczne wytaczanie armat na wróble. Na stronach nic się nie dzieje a dołączonych "frameworków" bez liku
> "bo tak wygląda profesjonalnie".


Nie. Bo czas jest cenniejszy niż te kilka kb kodu.
Nie obsługujemy w dzisiejszych czasach atarynek.

> Niech każdy myśli po swojemu. Tak jest ok. Czasami korzystam z procedur znalezionych w necie robiących
> ciekawe rzeczy. Reszta jest tak prymitywnie prosta że nie miałem jeszcze potrzeby stosowania np. jquery.
> A piszę aplikacje biznesowe o różnorodnych funkcjach.


Ale zdaj sobie sprawę że stajesz w opozycji do znacznej większości.
Dopóki nie masz konkurencji it's fine. Ale jak zaczniesz, to się może
okazać, że oni potrafią coś zrobić szybciej. I nikogo nie będzie wtedy
wzruszać tłumaczenie że przecież Twój kod wykonuje się 15 cykli
szybciej. :)
Wojciech Bancer (17.03.2017, 23:11)
On 2017-03-17, PawelS cbrbob(at)wbcd(dot)pl <fake> wrote:

[...]

> niestety, nie wszędzie zawsze można mieć naj.. naj... najnowszą przeglądarkę,
> czego stety efektem jest, że strona nie wyświetla się prawidłowo,
> bo jquery działa tylko u twórcy na jego jedynej słusznej przeglądarce
> (oraz całej podobnej do twórcy rodzinie).


Konkretne biblioteki/frameworki mają opisane wsparcie na konkretnych
przeglądarkach. Własnoręcznie dziergany kod nie ma takiego wsparcie i musi być
własnoręcznie wytestowany.

Na 1000 przypadków błedów może jeden będzie błędem frameworka, a nie programisty.
Więc jeszcze raz, czemu mam bardziej ufać komuś kto nie chce użyć frameworka,
niż zespołowi ludzi który poświęca mnóstwo czasu i wiedzy by dopracować jakieś
narzędzie? Bo ten jeden programista uważa że jest bardziej nieomylny? :)
Cezary Tomczyk (18.03.2017, 02:03)
On 17/03/2017 22:04, Wojciech Bancer wrote:
> On 2017-03-16, zpksoft <zpksoft> wrote:
> [...]
> Nie. Bo czas jest cenniejszy niż te kilka kb kodu.
> Nie obsługujemy w dzisiejszych czasach atarynek.


Pojęcie oszczędzania przez to czasu jest względne. Dodajesz coś, co
rozwiązuje jeden problem i jednocześnie tworzysz pięć innych problemów,
np. może okazać się, że jest niekompatybilne z inną bilioteką albo ów
lib jest zależny od cośTam 2.x a w projekcie jest tylko wersja 1.x.

Poza tym, dodanie każdego liba to ekstra czas na zarządzanie nim
(wersjami, kompatybilnością, a jak znajdziesz bug-a, to kto to ma
poprawić?).

>> Niech każdy myśli po swojemu. Tak jest ok. Czasami korzystam z procedur znalezionych w necie robiących
>> ciekawe rzeczy. Reszta jest tak prymitywnie prosta że nie miałem jeszcze potrzeby stosowania np. jquery.
>> A piszę aplikacje biznesowe o różnorodnych funkcjach.

> Ale zdaj sobie sprawę że stajesz w opozycji do znacznej większości.


To, że większość tak robi, nie znaczy, że dobrze.

> Dopóki nie masz konkurencji it's fine. Ale jak zaczniesz, to się może
> okazać, że oni potrafią coś zrobić szybciej. I nikogo nie będzie wtedy
> wzruszać tłumaczenie że przecież Twój kod wykonuje się 15 cykli
> szybciej. :)


Tu nie chodzi o przysłowiowe 15 cykli dłużej, ale dodawanie
niepotrzebnej warstwy, gdzie problem czasem może być rozwiązany w
prostszy sposób. ;-)

Podobne wątki