Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-11-2013, 14:30   #1
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1767
[jQuery/AJAX] Attivare funzione con parametri da link

Sulla pagina ho due link fatti in questo modo
Codice:
<a href='#' onclick='update(x,y)'>link</a>
<a href='#' onclick='update(w,z)'>link</a>
Entrambi devono chiamare la stessa funzione jQuery, ma con parametri diversi.
Questi parametri saranno inviati ad uno script PHP tramite post.
L'invio dei parametri tramite post so come va fatto, ma non riesco a chiamare la funzione.

Attualmente il codice è questo
Codice:
<script type="text/javascript">
    $(document).ready(function(){
        function update(param1,param2) {
            var form_data = {
                    p1: param1,
                    p2: param2
                };

            $.ajax({
                url: "update.php",
                type: 'POST',
                data: form_data,
                async: false,
                success: function(msg) {
                            $('div#main').html(msg);
                        }
            })
        });
    });
</script>
Cosa e come dovrei modificare?
Alhazred è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 14:44   #2
Tuvok-LuR-
Senior Member
 
L'Avatar di Tuvok-LuR-
 
Iscritto dal: Sep 2001
Città: Pisa
Messaggi: 2213
in javascript le funzioni creano scope, quindi la funzione update (annidata dentro la funzione handler del dom ready) non è visibile dal global scope dov'è l'inline click handler.
una soluzione semplice sarebbe assegnare la funzione update al global scope
Codice:
window.update = function(param1, param2) {....
oppure semplicemente dichiarare update fuori dal Dom ready

In ogni caso dovresti evitare di utilizzare javascript inline perchè è una pratica antiquata.
inolte hai una parentesi chiusa di troppo alla fine della dichiarazione di update.
prova cosi:

Codice:
<a href='#' data-param1="x" data-param2="y">link</a>
<a href='#' data-param1="w" data-param2="z">link</a>
Codice:
$(document).ready(function(){
    $('a').on('click', function() {
        var $a = $(this),
            form_data = {
                p1: $a.data('param1'),
                p2: $a.data('param2')
            };

        $.ajax({
            url: "update.php",
            type: 'POST',
            data: form_data,
            async: false,
            success: function(msg) {
                $('div#main').html(msg);
            }
        });
    });
});
ovviamente così funzionerà su tutti i link della pagina quindi adatta il selettore $('a') magari aggiungendo classi ai link o delegando al parent.
inoltre ti sconsiglio di utilizzare async: false perchè bloccherà completamente il browser fino alla fine della richiesta, sono veramente pochi i casi in cui è necessario utilizzarlo.
inoltre puoi aggiungere return false alla fine della funzione per prevenire il behaviour default del link (salto all'inizio della pagina)
__________________
9800X3D | 32GB DDR5 6400C30@TUNED | RTX 4090 | LG 32GQ950-B | Fractal Torrent | NZXT C1200W | Iliad Fibra 5Gb

Ultima modifica di Tuvok-LuR- : 08-11-2013 alle 15:01.
Tuvok-LuR- è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 16:21   #3
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1767
Bene, ho fatto come mi hai suggerito e la funzione viene chiamata.

Vado nel dettaglio di ciò che sto facendo così si capisce meglio.
Sto creando un calendario e i 2 link di cui ho parlato servono uno per avanzare di un mese e uno per tornare indietro di un mese.

Al click una funzione php rigenera il calendario e restituisce il codice html che sostituisce la visualizzazione precedente con quella del mese precedente o successivo, compresi i 2 link con parametri aggiornati.
Al primo click funziona, il calendario viene aggiornato correttamente, ma da qui in poi, pur cliccando sui 2 link non accade nulla, la funzione jQuery non viene più attivata.

Il codice html della nuova visualizzazione viene generato correttamente, compresi i nuovi parametri per i 2 link, ho verificato salvando il codice in un file di testo.

Ho anche messo un alert nella funzione jQuery in modo da sapere se viene attivata o no, l'alert appare solo la prima volta, quindi le successive non attivano la funzione.

Da cosa dipende?
Alhazred è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 16:37   #4
Tuvok-LuR-
Senior Member
 
L'Avatar di Tuvok-LuR-
 
Iscritto dal: Sep 2001
Città: Pisa
Messaggi: 2213
probabilmente tra l'html che stai sostituendo ci sono anche quei due link, giusto?
siccome il binding degli eventi accade una sola volta, al DOM ready, gli handler vengono assegnati a quei due specifici link e una volta che sono sostituiti perdi anche il tuo handler.
la soluzione è l'event delegation: invece di assegnare l'handler agli <a> lo deleghi ad un elemento padre fisso (se hai div container che non viene sostituito lo assegnerai li ad esempio).
quindi il binding lo fai così ad esempio
Codice:
$('div.calendar').on('click', 'a', function() {
come vedi targhetti il padre e passi come secondo paramentro ad on.() il selettore che avevi prima.
tutto il resto rimane uguale.
http://net.tutsplus.com/tutorials/ja...-in-4-minutes/
__________________
9800X3D | 32GB DDR5 6400C30@TUNED | RTX 4090 | LG 32GQ950-B | Fractal Torrent | NZXT C1200W | Iliad Fibra 5Gb
Tuvok-LuR- è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 16:43   #5
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1767
Grazie mille, funziona
Alhazred è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 16:53   #6
Tuvok-LuR-
Senior Member
 
L'Avatar di Tuvok-LuR-
 
Iscritto dal: Sep 2001
Città: Pisa
Messaggi: 2213
prego!
una cosa carina che puoi fare è utilizzare l'attributo href nativo dei link, se puoi cambiare la richiesta in una get, e semplificare il tutto.
Codice:
<a href="update.php?month=12&year=2013">Next</a>
<a href="update.php?month=10&year=2013">Prev</a>
Codice:
$(document).ready(function(){
    $('div#main').on('click', 'a', function() {
        $.get(this.href, function(msg) {
            $('div#main').html(msg);
        });
        return false;
    });
});
__________________
9800X3D | 32GB DDR5 6400C30@TUNED | RTX 4090 | LG 32GQ950-B | Fractal Torrent | NZXT C1200W | Iliad Fibra 5Gb

Ultima modifica di Tuvok-LuR- : 08-11-2013 alle 16:55.
Tuvok-LuR- è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 17:07   #7
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1767
Per il sito sto usando un framework ed i parametri get vengono gestiti diversamente, dovrei vedere se riesco a sistemare i link per farglieli ricevere correttamente.
Alhazred è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Artemis II: nuovo test prima del Wet Dre...
GTA 6 gratis se nasce un figlio il giorn...
Quasi la metà degli smartphone at...
DDR5 a 16 dollari al gigabyte: Framework...
Meno di 3kg per 'diventare' bionici: l'u...
Al regalo di San Valentino ci pensa HUAW...
Intel multata in India: 30 milioni di do...
Beast of Reincarnation ha una data di us...
Provati Reno15 e Reno15 FS: analisi comp...
L'Europa sfida la Cina sul litio: in Fin...
Sono 32, di cui 6 nuove, le offerte Amaz...
Rinnovo dei coupon Amazon nascosti: ecco...
Corsair aggiorna la confezione delle RAM...
Ecco tutti i robot aspirapolvere in offe...
Tachyum: dal processore universale alle ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:49.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v