RISOLTO MouseEvent non funziona

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Salve a tutti,

ho creato una pagina web di esempio in cui cliccando su un elemento della pagina (un <div>), simula un click su un altro elemento (un <a>).

Il fatto è che non funziona, ho caricato il mio lavoro su jsfiddle a questo indirizzo e chiedo aiuto a voi per risolvere questo problema.



Grazie
 
M

Mursey

Ospite
Ho tolto le cose superflue così ti concentri solo sul codice che serve.
Codice:
<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>
<body>
    <a id="lnkBoom" href="javascript:alert('Dai')">Boom!</a>
    <div style="background-color:yellow;" id="evtGenerator">Genera click su collegamento Boom</div>
    <script>
        function cfpb(args) {
            var eve = document.createEvent("MouseEvents");
            eve.initMouseEvent(args.type, args.bubbles, args.cancelable, null, args.detail, args.screenX, args.screenY,
                args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, window);
            document.getElementById("lnkBoom").dispatchEvent(eve);
        }
        document.getElementById("evtGenerator").addEventListener('click', cfpb);
    </script>
</body>
</html>

Per la initMouseEvent ho optato per passare i parametri dell'evento originale.
 

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Questo funziona, grazie.

Però ciò che ho postato io era solo un esempio, ora mi serve il caso vero, cioè che se clicchi su qualunque punto della pagina, mi "devia" il click su Boom, alle coordinate 50% di X e 50% di Y, e comunque solo una volta da quando l'utente carica la pagina (magari posso usare un cookie).



Grazie
 
M

Mursey

Ospite
ora mi serve il caso vero, cioè che se clicchi su qualunque punto della pagina, mi "devia" il click su Boom, alle coordinate 50% di X e 50% di Y, e comunque solo una volta da quando l'utente carica la pagina (magari posso usare un cookie).

Il meccanismo e' lo stesso solo che invece di attivare il listener sul div lo fai su tutto il document come facevi tu.
Per le coordinate devi prima elaborarle e poi passarle alla initMouseEvent e per farlo una volta sola ti crei un flag booleano.
 

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Il meccanismo e' lo stesso solo che invece di attivare il listener sul div lo fai su tutto il document come facevi tu.
Per le coordinate devi prima elaborarle e poi passarle alla initMouseEvent e per farlo una volta sola ti crei un flag booleano.
Chiedo troppo se puoi farmi un esempio? Anche su jsfiddle va bene.



Grazie
 
M

Mursey

Ospite
se clicchi su qualunque punto della pagina, mi "devia" il click su Boom, alle coordinate 50% di X e 50% di Y, e comunque solo una volta da quando l'utente carica la pagina (magari posso usare un cookie).

Il codice seguente funziona su qualunque punto della pagina e solo una volta.
Non ho capito il discorso delle coordinate, cosa ti serve ?

Codice:
<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>
<body>
    <div>
        <input type="text" id="qui">
        <a id="lnkBoom" href="javascript:alert('Dai')">Boom!</a>
    </div>
    <script>
        var unaVoltaSola = false;

        function cfpb(args) {
            document.getElementById("qui").value = 'X: ' + args.clientX + ' - Y: ' + args.clientY;

            if (!unaVoltaSola) {
                var eve = document.createEvent("MouseEvents");
                eve.initMouseEvent(args.type, args.bubbles, args.cancelable, null, args.detail, args.screenX, args.screenY,
                    args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, window);
                document.getElementById("lnkBoom").dispatchEvent(eve);
                unaVoltaSola = true;
            }
        }

        window.addEventListener('click', cfpb);
    </script>
</body>
</html>
 

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Il codice seguente funziona su qualunque punto della pagina e solo una volta.
Non ho capito il discorso delle coordinate, cosa ti serve ?
Il discorso delle coordinate mi serve perché il click simulato, sulla mia vera pagina, non va su un pulsantino Boom, ma su un'immagine (carta geografica dell'Italia) dove ci sono i collegamenti fatti con <area> e quindi il click mi serve su un punto random generato da me (per il momento 50% e 50% come prova), così mi mostra le informazioni riguardanti la provincia cliccata in un alert (ma questo lo so fare).

Mi servirebbe gentilmente il fatto delle coordinate.


Grazie
 
M

Mursey

Ospite
Il discorso delle coordinate mi serve perché il click simulato, sulla mia vera pagina, non va su un pulsantino Boom, ma su un'immagine (carta geografica dell'Italia) dove ci sono i collegamenti fatti con <area> e quindi il click mi serve su un punto random generato da me (per il momento 50% e 50% come prova), così mi mostra le informazioni riguardanti la provincia cliccata in un alert (ma questo lo so fare).

Mi servirebbe gentilmente il fatto delle coordinate.


Grazie

Dovrebbe bastare :

eve.initMouseEvent(args.type, args.bubbles, args.cancelable, null, args.detail, args.screenX, args.screenY,
(args.clientX / 2), (args.clientY / 2), args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, window);
 

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Dovrebbe bastare :

eve.initMouseEvent(args.type, args.bubbles, args.cancelable, null, args.detail, args.screenX, args.screenY,
(args.clientX / 2), (args.clientY / 2), args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, window);

Questo codice mi fa il click al 50% delle coordinate dell'intera finestra, ma invece mi serve al 50% della larghezza e altezza dell'oggetto in questione dove punterò il click (il link boom).

Come posso fare?


Grazie
 
M

Mursey

Ospite
Questo codice mi fa il click al 50% delle coordinate dell'intera finestra, ma invece mi serve al 50% della larghezza e altezza dell'oggetto in questione dove punterò il click (il link boom).

Come posso fare?


Grazie

Accedendo con document.getElementById("nomeOggetto").width e document.getElementById("nomeOggetto").height
 

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Accedendo con document.getElementById("nomeOggetto").width e document.getElementById("nomeOggetto").height

Ho provato a creare un alert dalla console del mio browser, e sulle 2 cose scritte da te mi risponde undefined.
Dato che non specifico dalla grafica la larghezza e l'altezza del collegamento, non so come fare.

Mi servirebbe puntare il click in mezzo alle due O di Boom, in larghezza e altezza.



Grazie
 

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Sì ora va, grazie per l'aiuto.



Modifica:

Dato che pure io sono andato in ferie, ho solo visto se lo script funziona su jsfiddle. Ora ho provato a farlo anche sul mio sito e qui non va, con lo stesso codice.

Link su jsfiddle https://jsfiddle.net/1tmkahtq/4/

Link sul mio sito Prova

Eppure sta lo stesso codice.


Chi mi aiuta?


Grazie
 
Ultima modifica:
M

Mursey

Ospite
Il problema e' nella riga document.getElementById("cazz").addEventListener('click', cfpb);
per prendere un elemento bisogna che esso esista, quindi prima devi creare la sezione html poi eseguire il codice js.

Nel tuo caso risolvi spostando la sezione script nel body (come avevo fatto io nell'esempio) oppure chiamando la sola istruzione incriminata nel body.
 

hddsfortuna

Utente Attivo
869
39
Net
FTTH 1000/300
OS
Ubuntu 22.04
Il problema e' nella riga document.getElementById("cazz").addEventListener('click', cfpb);
per prendere un elemento bisogna che esso esista, quindi prima devi creare la sezione html poi eseguire il codice js.

Nel tuo caso risolvi spostando la sezione script nel body (come avevo fatto io nell'esempio) oppure chiamando la sola istruzione incriminata nel body.
Sì ora funziona, ma su jsfiddle non viene inserito nello stesso modo in cui avevo fatto io sul mio sito?



Ciao
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili