使用jQuery时出现"Uncaught TypeError: undefined is not a function"错误

5
我已经编写了一个脚本,用于向我的机器发起TCPIP请求,这个很正常。当我在switch语句中得到status = 0时(0表示读卡器没有准备好),我编写的代码会在10秒后再次“按下”“#print_card”按钮,以便再次尝试请求。一切都很正常,但是当我使用$('#print_card').trigger("click");再次按下按钮时,我会收到著名的错误:Uncaught TypeError: undefined is not a function while using jQuery,控制台会给出bootstrap.min.js:6文件(这是原始Bootstrap文件)。我尝试使用$('#print_card').click();,但没有任何变化...这是我的代码。如果我删除第439行的$('#print_card').trigger("click");,我就不会收到错误信息...:
  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;
        }
      }         
    })

  })

你是否在引入Bootstrap文件之前加载了jQuery?你是否在代码中使用jQuery之前等待DOM加载完成? - MarcoL
1
我编写了这个脚本来向我的机器发出TCPIP请求......不是那么底层。 :-) 你要求浏览器为你发出HTTP请求。 - T.J. Crowder
你在几个地方缺少 ;,例如在 clearInterval(t); }) 后面。 - urbz
2
尝试使用 $('#print_card').click(); - Shaunak D
@Mr.Web - 你的 return: false; 是否被误传了,导致点击事件没有触发? - urbz
显示剩余8条评论
1个回答

4

我认为在触发命令之前,你应该尝试将函数定义为一个变量!像这样:

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

然后当你想要调用它时,使用以下方式:

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

或者

window.clickFunction.trigger();

注意:您必须将变量定义为全局变量,并且必须在触发器或单击行之前定义!

让我知道进展如何。


1
好的,成功了!我是这样做的:window.clickFunction=function{...},而不是使用window.clickFunction.trigger();,我只是放置了一个普通的JavaScript clickFunction(); - Mr.Web

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接