Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    "Sbloccare" un link bloccato con preventDefault()

    Salve, sto cercando la funzione inversa di preventDefault(), ma con scarso successo... Ho provato stopPropagation() ma resta tutto invariato.
    Vorrei attivare o meno un link a seconda che sia selezionata o meno una checkbox: riesco a disattivare il link ma non a riattivarlo. Segue il codice...
    codice:
    <p><input type="checkbox" name="privacy" value="ok" id="privacy" checked /> Acconsento al trattamento dei dati personali<br />
    <a id="myLink" href="https://www.google.it" target="_blank">Vai su Google</a> (questo link non funzionerà se non accetti il trattamento dei dati personali!)</p>
    <script>
        var casella = document.getElementById("privacy");
        casella.addEventListener("click", controlla);
        function controlla() {
            if (casella.checked == false) {
                document.getElementById("myLink").addEventListener("click", function(event){
                    event.preventDefault();
                });
            } else { // da qui in poi è buio...
                document.getElementById("myLink").addEventListener("click", function(event){
                    event.stopPropagation();
                });
            }
        }
    </script>

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Ciao, non so se esista un metodo inverso di preventDefault()
    ad ogni modo ti basta usare una funzione nominata, così che puoi applicarla come listener con addEventListener() (come hai fatto per "controlla") e quindi rimuoverla con removeEventListener()

    Esempio:
    codice:
    <script>
        var casella = document.getElementById("privacy");
        casella.addEventListener("click", controlla);
        function controlla() {
            if (casella.checked)
                document.getElementById("myLink").removeEventListener("click", disabilitaClick);
            else
                document.getElementById("myLink").addEventListener("click", disabilitaClick);
        }
        function disabilitaClick (event){
            event.preventDefault();
        }    
    </script>
    .
    Esempio più stringato:
    codice:
    <script>
        var casella = document.getElementById("privacy");
        casella.addEventListener("click", controlla);
        function controlla() {
            document.getElementById("myLink")[(casella.checked ? 'remove' : 'add')+'EventListener']("click", disabilitaClick);
        }
        function disabilitaClick (event){
            event.preventDefault();
        }    
    </script>
    .
    Vedi se può andare.
    Buon proseguimento
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Quindi si usano addEventListener e removeEventListener come "interruttori" sulla funzione contenente il preventDefault.
    Sbagliavo a cercare l'interruttore insomma.
    Di solito uso questo tipo di istruzioni nei form per attivare/disattivare caselle di input a seconda dello stato di altri campi, ma lì ho a disposizione il disabled, qua no.

    Il codice va benissimo grazie.

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Quindi si usano addEventListener e removeEventListener come "interruttori" sulla funzione contenente il preventDefault.
    Sì, in questo caso è così ma chiaramente si può risolvere in vari modi.

    Ad esempio, potresti inserire la condizione direttamente nella funzione che assegni come listener; una cosa del genere:
    codice:
    <script>
        var casella = document.getElementById("privacy");
        document.getElementById("myLink").addEventListener("click", function(event){
            if (casella.checked == false) event.preventDefault();
        });
    </script>
    In sostanza applichi la funzione solo per il click del link e quindi, al suo interno, esegui il controllo del checkbox.

    Il risultato è uguale, cambia solo la logica di funzionamento.

    Sbagliavo a cercare l'interruttore insomma.
    Perché lo cercavi a luce spenta, bastava pigiare l'interruttore per accendere la luce, così avresti visto bene dove cercare l'interruttore

    Il codice va benissimo grazie.
    Bene
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.