Chiama più funzioni JavaScript nell'evento Onclick

  1. Passaggio di funzioni come valori al parametro onclick
  2. Utilizzo di JavaScript discreto
  3. Usando && e || operatori

Conosciamo molto bene l’evento onclick in javascript, che attiva una determinata funzione passata come valore all’attributo onclick. L’evento Document Object Model (DOM) di HTML è supportato per quasi tutti gli elementi HTML tranne alcuni come <br>, <head>, <html>, <iframe>, <meta>, <param>, <script>, <style> o <title>. È comunemente usato su tag html come <div>, <button>, <li>, <span>, <a> ecc. Ma come chiamiamo più di una funzione su un clic di un <div>, <li> o di un <pulsante>. Di seguito sono riportati alcuni modi per farlo.

  • Passaggio di funzioni come valori al parametro onclick
  • Utilizzo di JavaScript discreto
  • Usando && e || operatori

Passaggio di funzioni come valori al parametro onclick

Il modo più comune di utilizzare l’attributo onclick consiste nell’assegnare la funzione come valori all’attributo onclick. Lo scriviamo di solito nel codice della GUI all’interno di un tag HTML. Per passare più funzioni come valori, elencale separate da punto e virgola nell’attributo onclick di quel tag. La sintassi per esso è la seguente.

onclick = "functionA(); functionB();"

Entrambe le funzioni verranno eseguite una dopo l’altra. Ad esempio, se usiamo il seguente codice con le funzioni funzioneA() e funzioneB(), il risultato sarà l’esecuzione sequenziale delle due funzioni nell’ordine indicato nei valori.

<div id="output" onclick="functionA(); functionB();"></div>
function functionA() {
    for (let i=0; i<5; i++) {
        console.log(i + " Mars is a planet");
    }
}
function functionB() {
    for (let i=0; i<5; i++) {
        console.log(i + " The sky is blue");
    }
}

Uscita:

0 Mars is a planet
1 Mars is a planet
2 Mars is a planet
3 Mars is a planet
4 Mars is a planet
0 The sky is blue
1 The sky is blue
2 The sky is blue
3 The sky is blue
4 The sky is blue

Osservazioni

  • L’esecuzione di più funzioni con onclick è supportata su tutti i browser Web e per la maggior parte degli elementi HTML. È un metodo chiaro e conciso per chiamare più funzioni.
  • L’esecuzione della funzione è sequenziale. Pertanto, è possibile pianificare la sequenza in cui devono essere effettuate le chiamate al metodo elencando le funzioni di conseguenza.
  • Invece di usare il punto e virgola dopo il nome di una funzione, possiamo anche separarli con una virgola. Significa che anche onclick = "function1(), function2()" è una sintassi valida.
  • C’è uno svantaggio nell’usare più funzioni passate in un evento onclick. Se uno dei metodi passati come parametri fallisce a causa di qualche eccezione, interrompe l’intera catena. E tutte le funzioni successive non verranno eseguite.
  • L’uso di onclick nei tag rende il codice leggibile. Non manipoliamo il DOM non viene manipolato. Significa che specifichiamo le funzioni in modo statico nell’HTML. Quindi, non aggiungiamo alcuna funzione all’evento onclick dell’elemento DOM in fase di esecuzione. Il browser analizza l’HTML e può associare gli eventi di clic in fase di analisi.

Utilizzo di JavaScript discreto

Un altro modo per passare funzioni nell’onclick in JavaScript è aggiungere ascoltatori onclick nel codice JavaScript. In questo metodo, troviamo l’elemento target e colleghiamo la nostra funzione all’evento onclick di quell’elemento. L’approccio non invadente è un modo di programmazione in cui manteniamo gli eventi javascript nel codice js e l’HTML include solo la pagina statica (Fare riferimento qui per ulteriori informazioni). Di seguito è riportato il modo discreto di chiamare più funzioni sull’evento click.

let element = document.getElementById('output');
element.addEventListener('click', functionA);
element.addEventListener('click', functionB);

Produzione:

0 Mars is a planet
1 Mars is a planet
2 Mars is a planet
3 Mars is a planet
4 Mars is a planet
0 The sky is blue
1 The sky is blue
2 The sky is blue
3 The sky is blue
4 The sky is blue

Osservazioni

  • Le funzioni vengono eseguite in sequenza ma non sono dipendenti. Quindi, se una funzione non viene eseguita, il resto delle funzioni non viene bloccato a differenza del caso in onclick="functionA(), functionB()".
  • Possiamo aggiungere più funzioni con questo metodo. Per rimuovere dinamicamente una funzione già aggiunta, dobbiamo utilizzare il removeEventListener. La sintassi è la seguente.
element.removeEventListener('click', alertFirst);
  • Sarà difficile eseguire il debug della funzionalità poiché l’HTML non mostrerà le funzioni collegate con l’onclick dell’elemento HTML. I metodi sono mappati all’evento onclick in fase di esecuzione durante la compilazione del codice javascript.
  • Questo metodo di aggiunta di onclick in fase di esecuzione offre la flessibilità di eseguire funzioni in modo intelligente in base alla logica di business, poiché l’associazione viene eseguita in fase di compilazione in fase di esecuzione.

Usando && e || operatori

Si possono includere più funzioni separate da && e || operatori. Le funzioni dovrebbero avere un tipo restituito booleano. Di solito, utilizziamo questo approccio quando è necessario decidere su alcune condizioni e quindi eseguire la funzione prevista. Se queste condizioni richiedono controlli logici complessi o lunghi, è preferibile crearli come funzioni e mantenerli all’interno del codice js per rendere l’HTML snello e leggibile. Il codice seguente approfondisce l’uso.

<div id="output" onclick="isValidPage(pageNum) && fetchPageDetails(pageNum)"></div>
function isValidPage(pageNumber) {
    let pageNum = parseInt(pageNumber);
    let maxPagesCount = 10;
    let isValidPageNumber = false;
    if (!isNaN(pageNum)) {
        if (pageNum > 1 && pageNum < maxPagesCount) {
            isValidPageNumber = true;
        }
    }
    return isValidPageNumber;
}

function fetchPageDetails(pageNumber) {
    // Call Backend service to get the detils
}

Nel codice sopra la funzione fetchPageDetails() verrà chiamata solo dopo che la funzione isValidPage() restituirà true. In sostanza, l’operatore && fa in modo che la funzione fetchPageDetails() venga eseguita solo se il pagenumber è valido.

Osservazioni

  • In questo metodo, l’esecuzione delle funzioni è sequenziale. Segue la logica come codice usando il && e il || operatori. Se un metodo fallisce a causa di eccezioni, non esegue le funzioni rimanenti.
  • Possiamo utilizzare questo metodo nei casi in cui abbiamo funzioni con tipi restituiti booleani o tipi che corrispondono all’operatore logico utilizzato nel codice.
  • Poiché specifichiamo le funzioni nell’attributo click dell’elemento HTML, questo metodo è un modo statico di dichiarare più funzioni. Non creiamo associazioni di runtime.

Articolo correlato - JavaScript Event

  • Evento di ridimensionamento della finestra in JavaScript