2

すべてのjqueryをjquery1.9.1で動作するように更新することにしましたが、このスクリプトが動作しなくなった理由を知ることができます。他のすべてのjqueryバージョンで正常に動作します。

// Typewriter function
$.fn.Typewriter = function Typewriter(opts) {
    var $this = this,
        defaults = {
            animDelay: 50
        },
        settings = $.extend(defaults, opts);
    var objDiv = document.getElementById(settings.div);
    $.each(settings.text, function (i, letter) {
        setTimeout(function () {
            $this.html($this.html() + (letter != '\n' ? letter : '<br />'));

            objDiv.scrollTop = objDiv.scrollHeight;
        }, settings.animDelay * i);
    });
};

// Call with 
// $('#divID').Typewriter({animDelay: 10,text: 'text to animate', div: 'divID'});

$('#outputDiv').Typewriter({
    animDelay: 10,
    text: 'Why does this not work in jquery 1.9.1? :( ',
    div: 'outputDiv'
});

Jsフィドルは以下に含まれています

http://jsfiddle.net/T2AJ5/

編集:

Chrome開発ツールを使用すると、コンソールの読み取りでエラーが発生します。

Uncaught TypeError:「in」演算子を使用して「42」を検索できません。これがjquery1.9.1で機能しないのはなぜですか。:(

4

1 に答える 1

6

$.each文字列をループするために使用することはありません。以前は正しく機能したとは思えません。すばやく修正するには、に変更しsettings.text.split('')ます。

ところで、に追加するのinnerHTML面倒です。DOMを使用する方がよいでしょう。jQueryプラグインにラップされたコールバック地獄についてはこちらをご覧ください:-)

于 2013-02-25T19:43:19.020 に答える