2014-06-05 17 views
5

Ho scritto questo script per fare una richiesta TCPIP alla mia macchina, questo funziona correttamente.Unchaught TypeError: undefined non è una funzione durante l'utilizzo di jQuery

Quando ottengo status = 0 nell'interruttore (0 = lettore di schede non pronto) Ho scritto il codice in modo che un intervallo dopo 10 secondi "preme" nuovamente il pulsante "#print_card" in modo che riprova la richiesta.

Tutto funziona bene, ma quando si preme nuovamente il pulsante con $('#print_card').trigger("click"); ottengo il famoso errore:

TypeError Uncaught: undefined non è una funzione durante l'utilizzo di jQuery e la console dà questo al file bootstrap.min.js:6 (che è il file Bootstrap originale).

ho cercato $('#print_card').click(); e nulla cambia ...

Questo è il mio codice. Se rimuovo linea # 439 $('#print_card').trigger("click"); non ottengo l'errore ...:

var interval; 
    var status_timer; 
    function attendi_e_riprova(txt){ 
    var sec = 10; 

    var interval = setInterval(function(){ 
     if(sec != 1){ 
     sec--; 
     if(sec == 1){ 
      sec_word = 'secondo'; 
     }else{ 
      sec_word = 'secondi'; 
     } 
     $('#card-modal-body').html('<p>'+txt+'</p>'); 
     }else{ 
     clearInterval(interval); 

     //THIS IS THE TRIGGER <----------------------------------- 
     $('#print_card').trigger("click"); 
     //THIS IS THE TRIGGER <----------------------------------- 

     return false; 
     } 
    }, 1000); 

    $('.close').click(function(){ 
     clearInterval(interval); 
     clearInterval(status_timer);   
    }); 

    } 

    var codemaster = '1'; 
    var chain = 1; 
    var shop = 1; 

    function scriviCard(){ 
    //Another function 
    } 


    $('#print_card').click(function(){ 
    $('#card-modal-body').html('<p><i class="fa fa-spinner fa-spin"></i> Ricerca del lettore e card, attendere&hellip;</p>'); 

    var req = '"CWD2";"'; 

    $.post(base_url()+'config/RichiestaTCPIP', {array:req}, function(status){ 
     if(status == 'err'){ 
     console.error('Errore: controller file config.php funzione di linea #117'); 
     }else{ 
     console.log('Status: '+status) 

     switch(status){ 
      case '0': 
      attendi_e_riprova('<i class="fa fa-ban text-danger"></i> Lettore NON disponibile. Assicurarsi che sia collegato.'); 
      break; 
      case '1': 
      attendi_e_riprova('Lettore vuoto. Inserire una card vergine per poterla scrivere.'); 
      break; 
      case '4': 
      attendi_e_riprova('<i class="fa fa-check text-success"></i> Card trovata. In attesa di riconoscimento...'); 
      break; 
      case '5': 
      attendi_e_riprova('<i class="fa fa-ban text-danger"></i> Card in scrittura. Attendere completamento.'); 
      break; 
      default: 
      //Nuova richiesta per la creazione card (per status 2 o 3) 
      scriviCard(); 
      //console.log(status) 
      break; 
     } 
     }   
    }) 

    }) 
+0

Si sta caricando jQuery prima del file di bootstrap? Stai aspettando che il DOM venga caricato prima di usare jQuery nel tuo codice? – MarcoL

+1

* "Ho scritto questo script per fare una richiesta TCPIP alla mia macchina ..." * Non * quasi * quello di basso livello. :-) Stai chiedendo al browser di fare una richiesta HTTP per te. –

+0

Ti mancano alcuni ';' in alcuni punti, come dopo 'clearInterval (t); }) 'ad esempio – urbz

risposta

4

Credo che si dovrebbe cercare di definire la funzione in una variabile prima che il comando di attivazione! qualcosa di simile:

window.clickFunction=function(
    $('#card-modal-body').html('<p><i class="fa fa-spinner fa-spin"></i> Ricerca del lettore e card, attendere&hellip;</p>'); 

var req = '"CWD2";"'; 

$.post(base_url()+'config/RichiestaTCPIP', {array:req}, function(status){ 
    if(status == 'err'){ 
    console.error('Errore: controller file config.php funzione di linea #117'); 
    }else{ 
    console.log('Status: '+status) 

    switch(status){ 
     case '0': 
     attendi_e_riprova('<i class="fa fa-ban text-danger"></i> Lettore NON disponibile. Assicurarsi che sia collegato.'); 
     break; 
     case '1': 
     attendi_e_riprova('Lettore vuoto. Inserire una card vergine per poterla scrivere.'); 
     break; 
     case '4': 
     attendi_e_riprova('<i class="fa fa-check text-success"></i> Card trovata. In attesa di riconoscimento...'); 
     break; 
     case '5': 
     attendi_e_riprova('<i class="fa fa-ban text-danger"></i> Card in scrittura. Attendere completamento.'); 
     break; 
     default: 
     //Nuova richiesta per la creazione card (per status 2 o 3) 
     scriviCard(); 
     //console.log(status) 
     break; 
    } 
    }}); 

e poi quando si voglia chiamare usare in questo modo:

$('#print_card').click(window.clickFunction); 

o

window.clickFunction.trigger(); 

NOTA: è necessario definire la variabile come globale variabile e DEVE essere definita prima del trigger o della linea di click!

fammi sapere come va.

+1

OK, ha funzionato! L'ho fatto in questo modo: 'window.clickFunction = function {...} 'e invece di' window.clickFunction.trigger(); 'Ho appena inserito un normale javascript' clickFunction(); ' –

Problemi correlati