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
-
参照你说的这个库的demo一个个的排除掉可能的参数引发的错误,发现是
fg
参数引发的错误,若是是色值就不会报错,说明是图片的处理代码出了问题ide -
找处处理
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(){})在高版本中已经废弃,