Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-11-2013, 13:30   #1
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1776
[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, 13: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 14:01.
Tuvok-LuR- è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 15:21   #3
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1776
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, 15: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, 15:43   #5
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1776
Grazie mille, funziona
Alhazred è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 15: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 15:55.
Tuvok-LuR- è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2013, 16:07   #7
Alhazred
Senior Member
 
L'Avatar di Alhazred
 
Iscritto dal: Dec 2003
Messaggi: 1776
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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Microsoft Defender: falso allarme sull'a...
Aerei in volo e truppe pronte all'assalt...
Usano Claude per hackerare OpenAI: ricer...
RatHat: il nuovo malware Android usa il ...
Domanda di petrolio in calo di 2,5 milio...
Il meglio delle offerte weekend Amazon a...
Dopo oltre 100 anni di tentativi, l'IA d...
Speciale robot aspirapolvere in offerta ...
L'IA sta cancellando i lavori junior? Il...
Debutta Chery Italia: non più sol...
Addio ai dischi? Xbox ci aveva già...
Speciale TV Amazon: 4 modelli, da 139€ f...
Il nuovo iPhone 18 Pro Max ha una ricari...
Speciale smartphone Android: 7 modelli i...
La Camera USA presenta il conto: i data ...
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: 04:08.


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