• 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
129 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 (254,490 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ź 215 wizyt
pytanie zadane 1 lutego 2022 w JavaScript przez sk1neq Nowicjusz (120 p.)
0 głosów
1 odpowiedź 241 wizyt
pytanie zadane 23 października 2019 w JavaScript przez Mavimix Dyskutant (8,420 p.)
0 głosów
1 odpowiedź 376 wizyt
pytanie zadane 13 listopada 2018 w JavaScript przez FroGiS Użytkownik (810 p.)

92,676 zapytań

141,580 odpowiedzi

320,058 komentarzy

62,039 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

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!

...