Nascondere elementi

di il
9 risposte

Nascondere elementi

Stavo facendo una pagina di modifica account e per motivi estetici avrei voluto nascondere l'input submit, per poi simularci un click col metodo .click()
Senza alcuno style applicato, usando btn.click() funziona tutto correttamente, ma se aggiungo (per renderlo invisibile) metto al bottone
btn {
position: absolute;
left: -9999px;
}
Facendo .click() non funziona più.

C'è un modo alternativo per nascondere un elemento e riuscire ad interagirci, o va bene questo ma sbaglio qualcosa?
Ci sono vari pezzi di codice richiesti per il template lato backend, che sono corretti e possono essere ignorati
Form html:

<form method="post" enctype="multipart/form-data" class="form">
                        <input type="text"  name="username" value="{{ user.username | title}}" title="Username" id="username">
                        <input type="email" value="{{ user.email }}" title="Email" id="email">
			 <h3 id="btn_modifica" title="Modifica le tue informazioni">Modifica</h3> // Finto bottone da cui far partire il .click()
                        <input type="submit" value="invia" style="position: absolute; left: -9999px" id="btn_sub"> //Bottone nascosto
</form>
Lato javascript:

let btn_sub = document.getElementById ('btn_sub')
let btn_modifica = document.getElementById ('btn_modifica')

btn_modifica.addEventListener ('click', enable)

function enable () {
    btn_modifica.textContent = 'Conferma'
    btn_modifica.removeEventListener ('click', enable)
    btn_modifica.addEventListener ('click', disable)
}
function disable () {
    btn_modifica.textContent = 'Modifica'
    btn_modifica.removeEventListener ('click', disable)
    btn_modifica.addEventListener ('click', enable)
    if (confirm ('Confermare?')) btn_sub.click();
}

9 Risposte

  • Re: Nascondere elementi

    Perché hai due elementi "btn_modifica" all'interno della tua pagina?
  • Re: Nascondere elementi

    Alka ha scritto:


    Perché hai due elementi "btn_modifica" all'interno della tua pagina?
    Ho sbagliato a scrivere, correggo
  • Re: Nascondere elementi

    Gabu ha scritto:


    Ho sbagliato a scrivere, correggo
    Come puoi "sbagliare a scrivere" se fai copia/incolla?
    Mi viene il dubbio che il tuo codice sia diverso da quello reale, e che quindi l'origine del problema venga offuscato.

    Qual è il codice corretto, senza elisioni?
  • Re: Nascondere elementi

    Alka ha scritto:


    Gabu ha scritto:


    Ho sbagliato a scrivere, correggo
    Come puoi "sbagliare a scrivere" se fai copia/incolla?
    Mi viene il dubbio che il tuo codice sia diverso da quello reale, e che quindi l'origine del problema venga offuscato.

    Qual è il codice corretto, senza elisioni?
    Ho copiato e incollato, tralasciando varie righe che erano o div o di descrizione, che sono sicuro che non influenzano, ora le metterò complete anche se so che non servono. Gli input partono da disabilitati, poi con js e un bottone li attivo e sono sicuro che senza applicare lo stile (position: absolute; left: -9999px) funziona. Non funziona quando metto questo css all'input:submit

    FORM
    
                <form method="post" enctype="multipart/form-data" class="form">
                    <div id="div_img" class="img-profilo" style="background-color: aquamarine;" title="Immagine del profilo">
                        <input style="position: absolute; left: -9999px;" type="file" name="profile_pic" accept="image/*" id="id_profile_pic">
                    </div>
                    <div class="info">
                        <div class="riga" style="justify-content: space-around;">
                            <input type="text"  name="username" value="{{ user.username | title}}" disabled title="Username" id="username">
                            <input type="email" value="{{ user.email }}" disabled title="Email" id="email">
                        </div>
                        <div class="fine">
                            <h3 id="btn_modifica" title="Modifica le tue informazioni">Modifica</h3>
                            <input type="submit" value="invia" style="position:absolute; left: -9999px;" id="btn_sub" disabled>
                            <h3 id="btn_cpsw" title="Cambia Password">Cambia Password</h3>
                            <h3 id="btn_logout2" title="Logout">Logout</h3>
                        </div>
                    </div>
                </form>
    
    JAVASCRIPT
    
    var btn_modifica = document.getElementById ('btn_modifica')
    var inputs = document.querySelectorAll ('input')
    var btn_sub = document.getElementById ('btn_sub')
    
    btn_modifica.addEventListener ('click', enable)
    
    function enable () {
        for (i = 0; i < inputs.length; i++) {
            inputs[i].disabled = false
        }
        btn_modifica.textContent = 'Conferma'
        btn_modifica.removeEventListener ('click', enable)
        btn_modifica.addEventListener ('click', disable)
    }
    function disable () {
        for (i = 0; i < inputs.length; i++) {
            inputs[i].disabled = true
        }
        btn_modifica.textContent = 'Modifica'
        btn_modifica.removeEventListener ('click', disable)
        btn_modifica.addEventListener ('click', enable)
        btn_sub.click();
    }
    
  • Re: Nascondere elementi

    A me funziona tutto regolarmente, o meglio cliccando sull'elemento H3 il tasto si abilita/disabilita.
    Il click non ha probabilmente effetto perché il controllo è in stato "disabled".

    Tra l'altro, nei campi usi valori tipo {{ user.username | title }} che sembrano espressioni: adotti AngularJS o altri framework?
  • Re: Nascondere elementi

    Quelle espressioni sono di django, quello che ho messo è il template html che invia il server.

    Il problema non è nel funzionare, tutto funziona ma con .click() sull'input:submit non succede niente. Ho provato a collegare un console.log () quando il bottone viene clickato e non succede niente. .click() non funziona sui button submit? C'è un altro metodo?
    Forse prima mi ero spiegato male, ma il mio intento è quello di simulare un click di un mouse su un input submit che non è visibile nella pagina, che funzioni
  • Re: Nascondere elementi

    Gabu ha scritto:


    Il problema non è nel funzionare, tutto funziona ma con .click() sull'input:submit non succede niente. Ho provato a collegare un console.log () quando il bottone viene clickato e non succede niente. .click() non funziona sui button submit? C'è un altro metodo?
    Ho provato a fare un Fiddle per testare, ma a me sembra tutto OK riguardo la simulazione del click.

    Prova a verificare nel sorgente della pagina che l'HTML sia esattamente come te lo aspetti, e magari invece del console.log() classico fai debug passo per passo del codice.

    Ciao!
  • Re: Nascondere elementi

    Alka ha scritto:


    Gabu ha scritto:


    Il problema non è nel funzionare, tutto funziona ma con .click() sull'input:submit non succede niente. Ho provato a collegare un console.log () quando il bottone viene clickato e non succede niente. .click() non funziona sui button submit? C'è un altro metodo?
    Ho provato a fare un Fiddle per testare, ma a me sembra tutto OK riguardo la simulazione del click.

    Prova a verificare nel sorgente della pagina che l'HTML sia esattamente come te lo aspetti, e magari invece del console.log() classico fai debug passo per passo del codice.

    Ciao!
    Va bene, grazie per la disponibilità
  • Re: Nascondere elementi

    Ho risolto, ho trovato il metodo form.submit() che equivale a premere il bottone
Devi accedere o registrarti per scrivere nel forum
9 risposte