jquery 1.4.2 から 1.4.3 にアップグレードする際の既知の問題はありますか? アップグレードしようとしていますが、1.4.3 ではイベントがまったく発生しません。1.4.2 に戻すと、すべて正常に動作します。完全に明らかな何かが欠けていますか?
コンソールに JavaScript エラーは表示されず、$(document).ready()
正常に動作しており、セレクターも問題ありません。イベントが発生していません。
jquery 1.4.2 から 1.4.3 にアップグレードする際の既知の問題はありますか? アップグレードしようとしていますが、1.4.3 ではイベントがまったく発生しません。1.4.2 に戻すと、すべて正常に動作します。完全に明らかな何かが欠けていますか?
コンソールに JavaScript エラーは表示されず、$(document).ready()
正常に動作しており、セレクターも問題ありません。イベントが発生していません。
これは jquery.uuid.js プラグイン、具体的にはこれが原因でした:
$.uuid = function(p) {
if (typeof (p) == 'object' && typeof (p.prefix) == 'string') {
_uuid_default_prefix = p.prefix;
} else {
p = p || _uuid_default_prefix || '';
return (p + _uuidlet() + _uuidlet() + "-" + _uuidlet() + "-" + _uuidlet() + "-" + _uuidlet() + "-" + _uuidlet() + _uuidlet() + _uuidlet());
};
};
関数の名前を $.uniqueidentifier に変更し、参照の名前を変更すると、イベントは jquery 1.4.3 以降のバージョンで正常に機能します。他の誰もこの問題に苦しむ必要がないことを願っています!
jQuery 1.4.2 から 1.4.3 にアップグレードすると、私の Web サイトも機能しなくなりました。
ここで Dean Edwards による Base.js ライブラリを使用します: http://dean.edwards.name/weblog/2006/03/base/ 問題を引き起こしたコードのスニペットは次のとおりです。
asm.ui.Builder = Base.extend({
/** Element to build other elements in (hidden, accessible). */
_builderCanvas: $('<div></div>')
.addClass('ui-helper-hidden-accessible')
.appendTo('body'),
/**
* Creates XHTML element with supplied tag name and attributes.
* @tparam string tag tag name
* @tparam object attributes tag attributes
* @treturn jQueryEl created element
*/
_buildTag: function (tag, attributes) {
var str = '<' + tag;
if (attributes != undefined) {
$.each(attributes, function (name, value) {
str += ' ' + name + '="' + value + '"';
});
}
str += ($.inArray(tag, this._singleTags) != -1)
? '/>'
: '></' + tag + '>';
var newTag = $(str);
return $(str).appendTo(this._builderCanvas);
},
...
});
問題は、_buildTag 関数内で _builderCanvas が 1 つの要素のコレクションであり、jQuery 1.4.2 の場合に追加できることです。ただし、jQuery 1.4.3 では、_builderCanvas はまだコレクションでしたが、空でした。
_buildTag 関数内に _builderCanvas 初期化を配置することで、これを回避しました。
私の問題の根本的な原因は、jQuery 1.4.2 では、document.body が存在する前に 'jQuery("body")' を呼び出した場合、とにかく (最適化として) document.body を返すことでしたが、jQuery 1.4.3 では、追加の条件 (&& document.body) が追加されたため、ドキュメントの準備が整う前に呼び出された場合、jQuery('body') は何も検出しません。
私の問題とは関係ありませんが、1.4.2 から 1.4.3 への重大な変更の 1 つは、関数 .data() が以前のデータをすべて消去するのではなく、それらに追加することです。