2014-06-05 4 views
5

Ich habe dieses Skript geschrieben, um eine TCPIP-Anfrage an meine Maschine zu machen, das funktioniert gut.Uncaught TypeError: undefined ist keine Funktion bei der Verwendung von jQuery

Als ich status = 0 in den Schalter (0 = Kartenleser nicht bereit) bekomme, schrieb ich den Code, so dass ein Intervall nach 10 Sekunden erneut die "#print_card" -Taste "drückt", so dass es die Anfrage erneut versucht.

Alles funktioniert gut, aber wenn ich den Knopf wieder mit $('#print_card').trigger("click"); drücken erhalte ich den berühmten Fehler:

Uncaught Typeerror: undefined ist keine Funktion, während jQuery und die Konsole gibt dies die bootstrap.min.js:6 Datei (das ist die ursprüngliche Bootstrap-Datei).

Ich versuchte $('#print_card').click(); und es ändert sich nichts ...

Dies ist mein Code. Wenn ich Linie 439 # entfernen $('#print_card').trigger("click"); Ich habe nicht den Fehler ...:

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

Laden Sie jQuery vor der Bootstrap-Datei? Warten Sie, bis das DOM geladen ist, bevor Sie jQuery in Ihrem Code verwenden? – MarcoL

+1

* "Ich habe dieses Skript geschrieben, um eine TCPIP-Anfrage an meine Maschine zu senden ..." * Nicht * fast * so niedrig. :-) Sie bitten den Browser, eine HTTP-Anfrage für Sie zu stellen. –

+0

Ihnen fehlen ein paar ';' an einigen Stellen, wie nach dem 'clearInterval (t); }) 'zum Beispiel – urbz

Antwort

4

Ich denke, Sie sollten Ihre Funktion in einer Variablen vor dem Trigger-Befehl versuchen zu definieren! so etwas wie dieses:

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

und dann, wenn Sie es wollen es so verwenden nennen:

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

oder

window.clickFunction.trigger(); 

HINWEIS: Sie die Variable als global definieren müssen Variable und MUSS vor der Trigger- oder Klickzeile definiert werden!

lassen Sie mich wissen, wie es geht.

+1

OK, das hat funktioniert! Ich habe es so gemacht: 'window.clickFunction = function {...} 'und anstelle von' window.clickFunction.trigger(); 'Ich habe gerade ein normales javascript' clickFunction(); 'plaziert –

Verwandte Themen