BG Development


Страници: (4) [1] 2 3 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> JS - викане по верига. Не работи. Помощ!
johnfound
Публикувано на: 09-04-2019, 11:58
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 7761
Регистриран на: 27.05.04



Идеята е, да могат да се присвояват няколко стойности на обработчик на събитие. Сега се опитвам да го правя със следния код, но не работи, поради слабото ми знаене на езика: icon_lol.gif

CODE

function addChain(event, func) {
 var old = event;
 if (typeof event != 'function') {
   event = func;
 } else {
   event = function() {
     if (old) old();
     func();
   }
 }
}

addChain(window.onload, function1);
addChain(window.onload, function2);


Ако не се опитвам да пращам събитието като аргумент, всичко си работи, обаче за всяко отделно събитие, за което искам да я използвам трябва да пиша отделен код.

Как да предавам като аргумент не стойността на събитието, а самото събитие?


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 48C0321ADDB2FE5F644BB5E3D58B0D58C35E5BCBC81D7CD333633FEDF1047914A534256478D9
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 09-04-2019, 12:36
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2659
Регистриран на: 17.01.17



Нещо не ти схващам въпроса.

window.onload не е събитие. Това е функция, манипулатор на събития. Тя приема като аргумент самото събитие (браузерът генерира събитието и го подава на манипулатора). За да направиш верижна обработка на събития трябва първо да си направиш някаква колекция в която да региситрираш допълнителни манипулатори. След това, в window.onload си циклиш колекцията и предаваш самото събитие като аргумент.

А вече, дали ще реализираш верига или нещо друго си е въпрос на предпочитание.
PMEmail Poster
Top
johnfound
Публикувано на: 09-04-2019, 12:41
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 7761
Регистриран на: 27.05.04



QUOTE (thrawn @ 09-04-2019, 13:36)
Нещо не ти схващам въпроса.

window.onload не е събитие. Това е функция, манипулатор на събития. Тя приема като аргумент самото събитие (браузерът генерира събитието и го подава на манипулатора). За да направиш верижна обработка на събития трябва първо да си направиш някаква колекция в която да региситрираш допълнителни манипулатори. След това, в window.onload си циклиш колекцията и предаваш самото събитие като аргумент.

А вече, дали ще реализираш верига или нещо друго си е въпрос на предпочитание.

window.onload въобще е поле на window, което може да съдържа функция, която да се вика при събитието. В този смисъл използвам и термина "обработчик на събитието" = "манипулатор на събития" в твоята терминология.

За изясняване на въпроса, ето код, който работи, но само и единствено за "window.onload", а аз искам за произволни обработчици на събития:

CODE

function addChain(func) {
var old = window.onload;
if (typeof window.onload != 'function') {
  window.onload = func;
} else {
  window.onload = function() {
    if (old) old();
    func();
  }
}
}

addChain(function1);
addChain(function2);


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 48C0321ADDB2FE5F644BB5E3D58B0D58C35E5BCBC81D7CD333633FEDF1047914A534256478D9
PMEmail PosterUsers Website
Top
NoBBy
Публикувано на: 09-04-2019, 13:04
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 30
Регистриран на: 31.08.05



Май се опитваш да преоткриеш addEventListener
PMEmail Poster
Top
johnfound
Публикувано на: 09-04-2019, 13:13
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 7761
Регистриран на: 27.05.04



@NoBBy - може би. Както казах, не знам езика и я карам на обща култура.

С addEventListener могат ли да се добавят функции? И в какъв ред се изпълняват добавените функции?


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 48C0321ADDB2FE5F644BB5E3D58B0D58C35E5BCBC81D7CD333633FEDF1047914A534256478D9
PMEmail PosterUsers Website
Top
Golden Gega
Публикувано на: 09-04-2019, 13:28
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1626
Регистриран на: 04.06.10



Джони, човека ти е дал линк, виж секцията Example of options usage, това е точно което питаш
PMEmail Poster
Top
NoBBy
Публикувано на: 09-04-2019, 13:34
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 30
Регистриран на: 31.08.05



Да, можеш да закачиш множество обработчици на събитие към елемент. Редът на изпълнение спазва редът в който си ги закачил. (Това може и да не важи за много стари браузъри, трябва да се провери, ако таргетираш нещо сравнително древно)

CODE

window.addEventListener("load", function() {
   console.log("Hello from 1st");
});
window.addEventListener("load", function() {
   console.log("Hello from 2nd");
});
window.addEventListener("load", function() {
   console.log("Hello from 3rd");
});


Горният код при зареждане на прозореца ще изпълни 3те функции поред.
Разбира се може да смениш типът събитие както и елементът, който слуша събитието.
PMEmail Poster
Top
johnfound
Публикувано на: 09-04-2019, 13:38
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 7761
Регистриран на: 27.05.04



QUOTE (Golden Gega @ 09-04-2019, 14:28)
Джони, човека ти е дал линк, виж секцията Example of options usage, това е точно което питаш

Чета бе, чета! Само че за да разбера текста от линка, май трябва първо да науча JS. icon_lol.gif

@NoBBy: Мерси! Точно това ми трябваше. Не като другите, празни приказки и пози на горди експерти: "Това всеки го знае и терминологията не ти е правилна!" icon_razz.gif

Това мнение е било редактирано от johnfound на 09-04-2019, 13:40


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 48C0321ADDB2FE5F644BB5E3D58B0D58C35E5BCBC81D7CD333633FEDF1047914A534256478D9
PMEmail PosterUsers Website
Top
Антон Яначков
Публикувано на: 09-04-2019, 14:44
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 1339
Регистриран на: 27.07.16



QUOTE (NoBBy @ 09-04-2019, 13:34)
Да, можеш да закачиш множество обработчици на събитие към елемент. Редът на изпълнение спазва редът в който си ги закачил. (Това може и да не важи за много стари браузъри, трябва да се провери, ако таргетираш нещо сравнително древно)

CODE

window.addEventListener("load", function() {
   console.log("Hello from 1st");
});
window.addEventListener("load", function() {
   console.log("Hello from 2nd");
});
window.addEventListener("load", function() {
   console.log("Hello from 3rd");
});


Горният код при зареждане на прозореца ще изпълни 3те функции поред.
Разбира се може да смениш типът събитие както и елементът, който слуша събитието.

Защо, да не би да смяташ, че така ще ги изпълни разбъркано?
CODE

window.addEventListener("load", function() {
   alert("Hello from 1st");
   alert("Hello from 2nd");
   alert("Hello from 3rd");
});


От какъв зор три пъти по ред ще проверяваш за едно и също събитие, ако искаш при това събитие да се изпълнят три поредни функции? То може, ама смисъл няма.
PMEmail PosterUsers Website
Top
40oz
Публикувано на: 09-04-2019, 15:04
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 347
Регистриран на: 23.05.13



QUOTE (Антон Яначков @ 09-04-2019, 14:44)
От какъв зор три пъти по ред ще проверяваш за едно и също събитие, ако искаш при това събитие да се изпълнят три поредни функции? То може, ама смисъл няма.

Направо да се забрани observable патърна, стига само глупости. Искали да ми се закачат по ивенти - будали!
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (4) [1] 2 3 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0