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

    jQuery su Tag Caricati Successivamente

    Salve,
    come da titolo mi ritrovo spesso in questo problema..!
    In pratica ho uno script jQuery, in questo caso è questo qui:

    codice:
          $(".fa-plus-circle").click(function(e) {
            e.preventDefault();
            var $this = $(this);
            var $input = $this.siblings('input');
            var value = parseInt($input.val());
    
    
            if (value < 9999) {
              value = value + 1;
            } 
            else {
              value =9999;
            }
    
    
            $input.val(value);
          });
    
    
          $(".fa-minus-circle").click(function(e) {
            e.preventDefault();
            var $this = $(this);
            var $input = $this.siblings('input');
            var value = parseInt($input.val());
    
    
            if (value > 0) {
              value = value - 1;
            } 
            else {
              value =0;
            }
    
    
            $input.val(value);
          });
    Che viene eseguito durante il caricamento della pagina..
    Poi però aggiungo del codice tramite una chiamata AJAX ed ecco che si presenta il problema.. Appaiono degli elementi a cui lo script jQuery dovrebbe fare riferimento, ma che non ha 'visto' perchè non c'erano nel momento in cui è stato caricato..!
    Così avevo pensato di mettere tutto sotto il nome di una function e di richiamarla nel momento in cui vengono caricati i nuovi elementi, tuttavia mi si presenta un altro problema, ricaricando la funziona, invece di aumentare e di diminuire di 1 unità, ogni volta che viene ricaricata la funzione aumenta l'addizione/sottrazione di 1 unità..
    Ho provato anche ad utilizzare la funzione .one di jQuery, ma quando vado a fare la seconda chiamata AJAX viene comunque alterato il codice..!

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,683
    Ciao, la soluzione si chiama "event delegation"; argomento discusso diverse volte anche qui sul forum.
    Puoi usare il metodo on() (vedi sulla documentazione la parte che riguarda, appunto, event delegation).

    Puoi quindi applicare la delegazione su un qualsiasi elemento genitore che tu sia certo resti presente quando vengono creati i nuovi elementi a cui sarà assegnato quell'evento specifico. Volendo puoi applicarla a document, l'elemento principale che di norma dovrebbe risultare sempre presente.

    Qui il tuo script con l'event delegation su document (l'ho anche ottimizzato un pochino):
    codice:
    $(document).on("click", ".fa-plus-circle", function(e) {
      e.preventDefault();
      var $input = $(this).siblings('input');
      var value = parseInt(+$input.val());
      $input.val(Math.min(value+1, 9999));
    });
    
    $(document).on("click", ".fa-minus-circle", function(e) {
      e.preventDefault();
      var $input = $(this).siblings('input');
      var value = parseInt(+$input.val());
      $input.val(Math.max(value-1, 0));
    });
    Buon proseguimento.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Grazie mille..
    Mi dispiace di non essere riuscito a trovare la risposta da solo sul forum o sul web..
    Ma la domanda mi sorge spontanea, perchè applicando questa regola su document, lo script viene caricato una volta sola?
    Cioè, seguendo la logica dei miei codici di prima, anche adesso dovrebbe ricaricare lo script ad ogni click sulla pagina secondo la mia logica niubbiana..
    Perchè non lo fa?

    PS: non
    codice:
    $("#badge-"+id).text(value);
    ma
    codice:
    $("#badge-"+id).text(value+1);
    Ultima modifica di Luigi636; 15-09-2017 a 10:42

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,683
    applicando questa regola su document, lo script viene caricato una volta sola?
    Cioè, seguendo la logica dei miei codici di prima, anche adesso dovrebbe ricaricare lo script ad ogni click sulla pagina secondo la mia logica niubbiana..
    Perchè non lo fa?
    Scusami ma non mi è chiaro cosa tu stia chiedendo. Di norma quello script viene caricato una sola volta comunque, a prescindere che sia applicato a document o no.

    PS: non
    codice:
    $("#badge-"+id).text(value);
    ma
    codice:
    $("#badge-"+id).text(value+1);
    Cioè?
    Non capisco a cosa ti riferisci.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Anche il badge deve aumentare in sincronia con l'input, altrimenti rimane di 1 indietro.. :-)

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,683
    Quote Originariamente inviata da Luigi636 Visualizza il messaggio
    Anche il badge deve aumentare in sincronia con l'input, altrimenti rimane di 1 indietro.. :-)
    Bene, questo lo sai tu; mi spiace ma non avendo seguito lo storico delle tue vicende conosco solo ciò che hai scritto in questa discussione, non so cosa sia il "badge" di cui hai scritto ora.

    Comunque buon proseguimento.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Hai ragione, ero convinto ci fosse nel codice che ho postato nel primo messaggio.. Pardon

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.