[Javascript] Funzione JS con parametro

Laskot

Nuovo Utente
5 Giu 2017
15
0
1
28
Ciao a tutti,
spero di spiegare decentemente qual è il mio problema.
In pratica ho una pagina HTML con un elenco di birrerie che prendo da un file JSON che ho salvato nel local storage.
Ogni birreria è contenuta in un div, tramite il for con cui ho creato i div ho associato un id a ciascun div e per ogni div ho creato un bottone che 'pigiato' dovrebbe far comparire informazioni aggiuntive di quella specifica birreria.

Il bottone:
Codice:
            var btn = document.createElement('button');
            result.appendChild(btn);
            var textbtn = document.createTextNode('Info menu');
            btn.appendChild(textbtn);
            btn.className = "buttonmenu";
            btn.setAttribute('onclick', 'infomenu(id)');
Vorrei fare in modo che quando onclick del bottone venga richiamata la funzione infomenu(id) dove l'id dovrebbe essere quello del div contenente il bottone.

Ho provato a buttare giù una bozza di funzione, ma il problema principale è che non so come passargli come parametro l'id specifico del div che contiene la birreria della quale vorrei avere più informazioni.
Scusate la spiegazione un po' vaga :)
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
Ciao, in sostanza dovresti riferirti in maniera relativa a qella variabile sapendo che appartiene all'elemento genitore di tale bottone. Non ho provato ma credo che si possa risolvere con parentNode o qualcosa di simile.

Una cosa del tipo (tra queste):
Codice:
infomenu(parentNode.id)
infomenu(parentElement.id)
infomenu(this.parentNode.id)
 

Laskot

Nuovo Utente
5 Giu 2017
15
0
1
28
Ciao,
grazie per la risposta.
In realtà non sono parenti i nodi credo.
Nel senso, erano due funzioni diverse e a me serviva richiamarne una nell'altra.
Alla fine ce l'ho fatta, nella funzione in cui ho creato il bottone btn ho scritto questo
Codice:
btn.setAttribute('onclick', "infomenu('"+index+"')");
e l'altra mia funzione si chiamava infomenu (id). Il mio problema era che non riuscivo a collegare le due: scrivevo nella prima infomenu (index) ma mi diceva che index non era definito, non ho idea del perchè scrivendo invece '" +index+ "' mi funzioni. Non ne ho veramente la più pallida idea.
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
In realtà non sono parenti i nodi credo.
Avevo capito che i pulsanti stavano dentro i rispettivi div; evidentemente ho inteso male.

È giusta la tua soluzione. Nel tuo codice iniziale, essendo incompleto, non era possibile capire se fosse presente una qualche variabile che restituisse il valore dell'id come tu hai poi fatto (usando la variabile index).

scrivevo nella prima infomenu (index) ma mi diceva che index non era definito, non ho idea del perchè scrivendo invece '"+index+ "' mi funzioni. Non ne ho veramente la più pallida idea.
È un po' lungo da spiegare e non è così intuitivo da capire. Con setAttribute tu stai dicendo di impostare un attributo direttamente sul tag HTML, per farlo devi passargli un valore, ad esempio una stringa testuale. Nel tuo caso l'attributo è onclick che di per sé non è una funzione JavaScript ma è un evento HTML definito, appunto, come attributo di quell'elemento HTML. Ora in questo evento tu puoi inserire un codice JavaScript, ma dovrai necessariamente definirlo come stringa testuale. Nel tuo caso, tale codice è il richiamo di una funzione a cui devi passare esattamente il valore della tua variabile index, e non il suo nome; questo perché l'interprete, una volta lanciata la funzione dall'evento onclick, andrebbe comunque a restituire il valore della variabile; dentro il pulsante (da cui è scatenato l'evento) però tale variabile risulta chiaramente indefinita.

Quindi hai bisogno di passare la stringa che dovrà contenere (come argomento della funzione) non tanto il nome della variabile ma bensì il suo valore.
Codice:
var index="qualcosa";
alert ("infomenu(index)"); // restituisce "infomenu(index)"
alert ("infomenu('"+index+"')"); // restituisce "infomenu('qualcosa')"

Spero sia un po' più chiaro adesso o quantomeno spero di non averti confuso maggiormente le idee.

Ci potrebbero essere comunque altri metodi, ad esempio definendo l'evento click come evento JavaScript e non impostandolo come attributo HTML... ma questa è un'altra storia :D
 
Discussioni simili
Autore Titolo Forum Risposte Data
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
F [Javascript] Problema funzione jquery con elementi css esterni Javascript 1
M [Javascript] Funzione con collegamenti ipertestuali JS Javascript 4
M Far partire una funzione/codice php con javascript Javascript 1
M Lanciare una funzione asp.net con javascript. E' possibile? ASP.NET 0
ivarello Attivare funzione Javascript con Jquery jQuery 0
C Un form di input e uno di output con funzione javascript Javascript 17
G ajax php myqsl - problema con funzione javascript Ajax 1
P visulaizzare eventi con una funzione in javascript Javascript 0
IClaude Funzione Javascript Javascript 8
max1974 [Javascript] Funzione Errata procedura Javascript 2
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
elpirata [Javascript] Lo script alle volte funzione altre volte no Javascript 0
R [Javascript] Rendere una funzione sempre visibile Javascript 2
A [Javascript] tabella dinamica e onchange su funzione Javascript 1
P [Javascript] Inserire una nuova condizione in una funzione Javascript 3
T [Javascript] funzione per attivare analytics... dov'è l'errore? Javascript 14
L [javascript]problema funzione per webapi Javascript 4
C [Javascript] Chiamata di una funzione da *.js esterno Javascript 1
J [Javascript] una funzione ricorsiva che non capisco come lavori Javascript 6
G [Javascript] nome da dare ad una funzione Javascript 1
ken_korn [Javascript] Portare variabile in una funzione esterna al suo scope Javascript 2
I Riportare dati funzione javascript in textbox Javascript 0
P [Javascript] eseguire una funzione dopo un'altra Javascript 0
Strato-Fortex [Javascript] Risoluzione funzione cifrario di Cesare Javascript 4
S [Javascript] Problema richiamo funzione Javascript 8
A Funzione javascript per effettuare la slide del carosello in avanti Javascript 0
Andrea Perrone funzione javascript applicata al gioco della dama Javascript 2
S [Javascript] Codice JS inline non funzione su IE Javascript 1
ANDREA20 [Javascript] funzione menu Javascript 1
U Far partire una funzione JavaScript premendo bottone in html Javascript 13
Marco_88 Funzione mouseover Javascript jQuery 3
V Chiamata funzione php da javascript Ajax 3
A richiamare funzione javascript dopo login in popup. Javascript 0
B AIUTO: come passare una variabile php ad una funzione javascript Javascript 2
F funzione javascript all'interno di un codice php PHP 38
A eseguire codice html da funzione javascript Javascript 2
D Problema nella chiamata ad una funzione javascript da href Ajax 2
G funzione javascript per passaggio valori Javascript 1
A Salvataggio dati (era: funzione penso in javascript) PHP 2
I Eseguire funz. Javascript caricata tramite la funzione Ajax di JQuery in onChange Javascript 0
I Eseguire funz. Javascript caricata tramite la funzione Ajax di JQuery in onChange Javascript 0
mkrapfen aiuto! funzione javascript Javascript 0
M JavaScript: lanciare funzione ASP per salvare dati in database Javascript 0
I javascript non carica funzione Javascript 0
D Funzione javascript che pulisca un campo input Javascript 0
F Memorizzare valore variabile da una funzione javascript Javascript 10
M Problema funzione chiamata una volta solo in javascript Javascript 1
R passare valori da funzione javascript Javascript 1
G richiamare file php da funzione javascript PHP 4

Discussioni simili