报错:jquery3.1.1报错Uncaught TypeError: a.indexOf is not a function

jquery3.1.1,怎么用的时候报错Uncaught TypeError: a.indexOf is not a function,换成1.9就能够了!
使用的时候是用一个刮奖的插件,代码以下:jquery

<script src="jquery-3.1.1.min.js"></script>
<script src="wScratchPad.min.js"></script>
<script> $("#mask_index").wScratchPad({ size : 40, bg : "", fg : "p1_bg.jpg", realtime : false, scratchDown : null, scratchUp : function(e, percent){ if(percent > 2){ this.clear(); this.enable("enabled", false); $("#mask_index").hide(300); } }, scratchMove : function(e, percent){ console.log(percent); }, cursor: "crosshair" }); </script>

只要换回1.9就没问题了,插件也不须要用3.1,只是好奇新版本有什么不同的?app

我把你的问题复现了一下,而后开始debug,先说下思路,我能看到jq里哪里出错了,但不知道是哪里跳到那里的ssh

  1. 参照你说的这个库的demo一个个的排除掉可能的参数引发的错误,发现是fg参数引发的错误,若是是色值就不会报错,说明是图片的处理代码出了问题ide

  2. 找处处理fg的代码,格式化代码,是这里的问题this

a(new Image) .attr("src", this.options.fg) .load(function () { b.ctx.drawImage(this, 0, 0, c, d), b.$img.show() })

3.debugger一下,果真是从这里到了报错的地方spa

4.对比jq高低版本的这段代码插件

    3.1.1是这样的debug

r.fn.load = function (a, b, c) { var d, e, f, g = this, h = a.indexOf(" ");

1.9.0是这样的code

st.fn.load = function (e, n, r) { if ("string" != typeof e && Rn) return Rn.apply(this, arguments); var i, o, a, s = this, u = e.indexOf(" ");

报错也正是你说的位置,能够看到1.9.0比3.1.1多了一个处理,相信是通过这个处理,e.indexOf这个方法没有报错blog

5.两段代码运行到这里的变量都是这样,

这是1.9.0通过处理的变量状况

这是3.1.1没通过处理的变量状况

 

 

ps:

碰巧遇到高版本jquery报此错,百度一番,看到一位外国网友很好的回答。具体以下:

This error might be caused by jquery event aliases like .load, .unload or .error deprecated since jQuery 1.8. Look for these aliases in your code and replace them with .on() to register listeners instead. Example:

$(window).load(function(){...});

becomes:

$(window).on('load', function(){ ...});

大概意思:$(window).load(function(){})在高版本中已经废弃,

相关文章
相关标签/搜索