2013-03-21 83 views
0

控制檯在第5和第8行顯示錯誤。錯誤是「未捕獲的插入函數參數不是字符串」。任何幫助將不勝感激。謝謝!未捕獲的插入函數參數不是字符串

$(function() { 
var animation = false; 
function typed(term, message, delay, finish) { 
    animation = true; 
    var da = 0; 
    term.set_prompt(''); 
    var interval = setInterval(function() { 
     term.insert(message[da++]); 
     if(da > message.length) { 
      clearInterval(interval); 
      setTimeout(function() { 
       term.set_command('') 
       term.set_prompt(message + ' '); 
       animation = false; 
       finish && finish(); 
      }, delay); 
     } 
    }, delay); 
} 
$('#fyeah').terminal(function(cmd, term) { 
    var finish = false; 
}, { 
    name: 'test', 
    greetings: null, 
    onInit: function(term) { 
     var msg = "testing"; 
     typed(term, msg, 150, function() { 
      finish = true; 
     }); 
    }, 
    keydown: function(e) { 
     if (animation) { 
      return false; 
     } 
    } 
}); 

});

+0

嗯,這是不可能的,你所提供的代碼來回答。我們需要知道你傳遞的消息是什麼時候傳遞給類型化的函數。我最初的想法是,它只是沒有正確格式化爲一個字符串。 – iAmClownShoe 2013-03-21 16:11:15

+0

你使用什麼插件? – Bergi 2013-03-21 16:12:36

+0

@Bergi看起來像[這一個](http://terminal.jcubic.pl/) – Pointy 2013-03-21 16:13:26

回答

2

有三種情況時message[da++]不是字符串」:

  • message是空字符串
  • (舊)IE不支持括號標記用於獲取字符串的單個字符更好,在循環的最後一次迭代中使用.charAt()方法
  • da == message.length - 僅當da已經大於長度時才結束。然而,這些指數是從零開始的,從0length-1

要修復它,用

// init 
var da = 0; 
var interval = setInterval(function() { 
    if (da < message.length) { 
     term.insert(message.charAt(da++)); // maybe better move the incrementing 
              // out, to the end of the loop 
    } else { 
     clearInterval(interval); 
     // teardown/callback 
    } 
}, delay); 
+0

非常感謝@Bergi! – Jordan 2013-03-21 16:42:41

相關問題