これには頭を悩ませています。アプリを 5 ~ 10 回リロードするたびに、jQuery 内で奇妙なエラーが発生します。圧縮されていないバージョンの jQuery 内にブレークポイントを追加して、エラーから抜け出そうとしましたが、Chrome はそれらのために停止することはなく、常にエラーにスキップします。
jQuery 1.7.2 を使用していますが、このエラーはバージョン 1.7 および 1.6.1 でも発生します。
私の JavaScript アプリでは、次のコード行を呼び出します。
this.element.find('.banner-btn')
this.element
jQuery オブジェクトはどこにありますか。これが問題を引き起こす理由はなく、10 回中 9 回は問題がありません。しかし、ランダムに何かが壊れ、そのコード行が呼び出されるたびに、結果はこのスタック トレースの変形になります。
Uncaught TypeError: Cannot call method 'apply' of undefined
makeArrayjquery-1.7.2.js:4858
Sizzlejquery-1.7.2.js:5110
jQuery.fn.extend.findjquery-1.7.2.js:5432
実際、これが壊れてから $.fn.find を呼び出すたびに、このエラーが発生します。私はあらゆる種類のことを試しました.jQueryソースを読んでいますが、これについてはどこにも行きません. 誰でもこれを釘付けにするためにどこに行くべきか考えていますか?
更新:うさぎの穴のさらに下
これをさらに jQuery ライブラリに追い込み、エラーが最初に発生する場所を見つけました。すこし。
DOM トラバーサルを追跡するために、jQuery はpushStackメソッドを使用します。これは jQuery.fn.find メソッドで呼び出され、jQuery オブジェクトを返すことになっています。通常はそうしますが、jQuery 内で何かがスナップすると、この関数は通常のオブジェクトのみを返し、jQuery の機能はありません。これにより、エラーが発生します。
jquery-1.7.2.js の 241 行目に定義されている、pushStack のソースの最初の部分を次に示します。
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
if(window._debug_jQuery_pushStack) { debugger }
// Build a new jQuery matched element set
var ret = this.constructor();
// ---- the function continues, but this is enough for us ----
var ret = this.constructor();
jQueryグッズが追加されるはずの場所です。この場合、そうではありません。どういうわけかthis
、jQuery ではなく、通常のオブジェクトに壊れています。ですから、私の質問は次のとおりです。この破損の原因を見つけるにはどうすればよいですか? 問題は、これがアプリケーションのロードの 10 回または 20 回に 1 回しか発生せず、完全にランダムに見えることです。