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

});

4

1 に答える 1

2

message[da++]" が文字列"でない場合は、次の 3 つの場合があります。

  • message空文字列です
  • (古い) IE は、文字列の単一文字を取得するためのブラケット表記をサポートしていません。.charAt()メソッドを使用することをお勧めします
  • ループの最後の反復で、da == message.length-daがすでに長さを超えている場合にのみ終了します。それでも、インデックスは 0 から始まり、 から まで実行さ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);
于 2013-03-21T16:20:35.727 に答える