2014-06-05 25 views
5

Napisałem ten skrypt, aby wysłać żądanie TCPIP do mojego komputera, działa to dobrze.Uncaught TypeError: undefined nie jest funkcją podczas używania jQuery

Kiedy otrzymam status = 0 w przełączniku (0 = czytnik kart nie jest gotowy) napisałem kod tak, aby interwał po 10 sekundach "naciskał" ponownie przycisk "#print_card", aby ponownie próbował wysłać żądanie.

Wszystko działa poprawnie, ale kiedy nacisnąć przycisk ponownie $('#print_card').trigger("click"); uzyskać słynny błąd:

Uncaught TypeError: niezdefiniowane nie jest funkcją podczas korzystania z jQuery i konsola daje to do pliku bootstrap.min.js:6 (który jest oryginalnym plikiem Bootstrap).

Próbowałem $('#print_card').click(); i nic się nie zmienia ...

To jest mój kod. Jeśli usunąć wiersz # 439 $('#print_card').trigger("click"); nie pojawia się błąd ...:

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

Czy ładujesz jQuery przed plikiem bootstrap? Czy czekasz na załadowanie DOM, zanim użyjesz jQuery w swoim kodzie? – MarcoL

+1

* "Napisałem ten skrypt, aby wysłać żądanie TCPIP do mojego komputera ..." * Nie * prawie * tak niski poziom. :-) Poprosiłeś przeglądarkę, aby wysłała ci prośbę o HTTP. –

+0

Brakuje kilku ';' w kilku miejscach, jak po 'clearInterval (t); }) 'na przykład – urbz

Odpowiedz

4

Myślę, że powinieneś spróbować definiowania funkcji w zmiennej przed poleceniem spust! coś takiego:

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; 
    } 
    }}); 

i wtedy, gdy chcemy nazwać go używać tak:

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

lub

window.clickFunction.trigger(); 

UWAGA: trzeba zdefiniować zmienną jako globalną zmienna i MUSI być zdefiniowana przed linią wyzwalacza lub kliknięcia!

daj mi znać, jak to działa.

+1

OK, zadziałało! Zrobiłem to w ten sposób: 'window.clickFunction = function {...} 'i zamiast' window.clickFunction.trigger(); 'Właśnie umieściłem normalny javascript' clickFunction(); ' –

Powiązane problemy