• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

javascript / jQuery przypisywanie wywoływanej funkcji pod onClick z tabeli

Object Storage Arubacloud
0 głosów
124 wizyt
pytanie zadane 23 sierpnia 2022 w JavaScript przez troian1337 Użytkownik (720 p.)
edycja 23 sierpnia 2022 przez troian1337

Witam, mam tabelę w której chcę przechowywać informację o przyciskach do utworzenia. 

var defaultOption = [
	{
		title: 'Sortuj parametry',
		onClick: 'setTheOrder'
	}
];

Oraz funkcję która generuje te przyciski

$.each(defaultOption, function(idx, data){
	var elem = document.createElement('a');
	elem.setAttribute('class', 'defaultOption');
	if (data.title) elem.innerHTML = data.title;
 $('#edit_product_card').append(elem);
});

Zabawa zaczyna się tutaj

if (data.onClick) elem.onclick = function() { setTheOrder(); }

Niestety nie bardzo wiem jak uzyskać efekt aby zamiast setTheOrder(); pobierało informację o nazwie funkcji z data.onClick.

Próbowałem czegoś w tym stylu jednak to też nie działa

elem.addEventListener("click", data.onClick, false);

Nie bardzo też wiem w jaki sposób "nazwać" to aby oddać o co mi chodzi więc może pokaże na przykładzie PHP

$this->model->{$_GET['funkcja']}($_GET['params']);

 

komentarz 23 sierpnia 2022 przez ScriptyChris Mędrzec (190,190 p.)

Niestety nie bardzo wiem jak uzyskać efekt aby zamiast setTheOrder(); pobierało informację o nazwie funkcji z data.onClick.

Co masz na myśli? Chcesz przypisać zawartość data.onClick do elem.onclick - czyli w data.onClick znajduje się funkcja (jej referencja albo sam kod do wywołania)?

komentarz 23 sierpnia 2022 przez troian1337 Użytkownik (720 p.)
W data.onClick chciałem przechować nazwę funkcji jaka znajduje się w innym pliku JS.

Docelowo chcę uzyskać efekt że w tabeli przechowuje informację o nazwie przycisku oraz to jaką funkcję ma mieć do siebie przypisaną (nazwę funkcji)
1
komentarz 23 sierpnia 2022 przez ScriptyChris Mędrzec (190,190 p.)

Odniesienie się do funkcji poprzez jej nazwę (zamiast referencji) zadziała, gdy przechowujesz ją jako metodę obiektu, albo ta funkcja jest globalna i przypisana do obiektu window. Wtedy możesz użyć bracket notation, żeby dostać się do funkcji dynamicznie poprzez obiekt, w którym ona się znajduje.

Na przykład:

window.explicitGlobalFunction = () => {};
var implicitGlobalFunction = () => {}; // dostępna również pod `window`

//// wywołania funkcji globalnych
window.explicitGlobalFunction(); 
window.implicitGlobalFunction();

// to samo, ale dynamicznie (za pomocą zmiennych)
const dynamicExplicitGlobalFunctionName = 'explicitGlobalFunction';
const dynamicImplicitGlobalFunctionName = 'implicitGlobalFunction';
window[dynamicExplicitGlobalFunctionName]();
window[dynamicImplicitGlobalFunctionName]();

//// wywołania metody
const dynamicMethodName = 'someMethod';
const obj = {
  someMethod() {}
};
obj.someMethod();
obj[dynamicMethodName](); // to samo, ale z użyciem nazwy ze zmiennej

 

1
komentarz 23 sierpnia 2022 przez troian1337 Użytkownik (720 p.)
edycja 23 sierpnia 2022 przez troian1337

Faktycznie dzięki za rozwiązanie

const functionName = data.onClick;
elem.onclick = function() { window[functionName](); }; 

A ja głupi szukałem po google pod frazami "convert string to function name"

komentarz 23 sierpnia 2022 przez VBService Ekspert (253,340 p.)

BTW, powinno zadziałać bez dodatkowych zmiennych

elem.addEventListener('click', window[data.onClick]);
elem.onclick = window[data.onClick];
elem.setAttribute('onclick', data.onClick +'()');

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 207 wizyt
pytanie zadane 1 lutego 2022 w JavaScript przez sk1neq Nowicjusz (120 p.)
0 głosów
1 odpowiedź 235 wizyt
pytanie zadane 23 października 2019 w JavaScript przez Mavimix Dyskutant (8,390 p.)
0 głosów
1 odpowiedź 369 wizyt
pytanie zadane 13 listopada 2018 w JavaScript przez FroGiS Użytkownik (810 p.)

92,575 zapytań

141,424 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...