• User Attivo

    [jQuery] .change() condizionale

    Ciao ragazzi,
    in una pagina web ho alcuni campi input (senza form) e un bottone utile per l'invio dei dati.
    Non ho integrato un form completo per il semplice fatto che la gestione dei dati dopo il submit viene effettuata interamente via Ajax.
    Spiego il funzionamento con i commenti sul codice.

    Codice html schematico:
    [HTML]
    <input type="text" id="campo1" value="" />
    <input type="text" id="campo2" value="" />
    <a href="Javascript:;" id="submit"><img src="image.png" alt="" /></a>
    [/HTML]

    Javascript (jQuery):

    
    $(document).ready(function () {
        aggiungoEventi();
    });
    
    function aggiungoEventi() {
        // in caso di click sul bottone
        var action='';
        $("#submit").click(function(e){
            verificaEinvio(action);
        });
        
       // verifica caratteri e lancio funzione esecutiva
        $("input").keypress(function(e){
            var value = (e.which) ? e.which : e.keyCode;
            if ( (value >= 48 && value <= 57) || value == 13 || value == 8 ) {
                $(this).css('color',  '#000' );
                return;
            } else return false;
        }).change(function(e){
            verificaEinvio(action);
        });
        
    }
    
    function verificaEinvio() {
       // funzione esecutiva; se *action*='' verifica solo che i requisiti siano soddisfatti, se *action*='insert' effettua sia la verifica che il submit dei dati
    }
    
    

    Ora, il tutto è funzionante salvo che, quando viene cliccato il bottone, non viene preso in considerazione l'evento click e dunque action non viene settata. Viene semplicemente lanciata una verifica, dall'ebento change relativo all'ultimo input modificato.

    E' possibile far si che se viene cliccato il bottone venga saltato l'evento $("input").change() e lanciata la funzione sull'evento click del bottone?

    In pratica dovrei ottenere che:

    • Quando un input perde il focus:
      a) Venga effettuato il controllo con l'evento onkeypress;
      b) Venga lanciata la funzione sull'evento onchange();

    • Se l'input perde il focus perché viene cliccato il bottone:
      a) venga effettuata la verifica dei caratteri immessi ad ogni evento onkeypress dell'input;
      b) venga lanciata la funzione sull'evento onclick del bottone.

    Mi sapete aiutare?


  • User Attivo

    Al momento ho risolto in questo modo:

    
    
    function aggiungoEventi() {         
        // verifica caratteri e lancio funzione esecutiva
        $("input").keypress(function(e){
        var value = (e.which) ? e.which : e.keyCode;         
        if ( (value >= 48 && value <= 57) || value == 13 || value == 8 ) {             
            $(this).[css](http://www.giorgiotave.it/forum/wikigt/os/CSS)('color',  '#000' );             
            return;         
        } else return false;     });
    
       // in caso di click sul bottone
       $("#submit").on('click', { action: "insert" }, verificaEinvio),
       // sull'evento onchange dell'input senza click sul bottone (es. se si clicca su un altro campo input)
       $(input).on('change', { action: "ver" }, verificaEinvio);      }
    
    

    Se qualcuno ha un'idea migliore, ben venga 🙂