jQuery 3.3.1未捕获的TypeError:e.indexOf不是w.fn.init.w.fn.load的函数

时间:2018-09-27 12:24:27

标签: jquery image zoom jquery-3

<img class="my-foto" src="fashion-033-thumb.jpg" data-large="fashion-033.jpg">

<!-- Optional JavaScript -->
<!-- <script src="jquery-1.8.2.min.js"></script> -->
<script src="jquery-3.3.1.min.js"></script>
<script src="zoomsl-3.0.js"></script>
<script>
  $(function() {
    $('.my-foto').imagezoomsl({ 
      zoomrange: [3, 3] 
    });  
  });
</script>

zoomsl不适用于jquery 3.3.1版本的控制台,抛出e.indexOf不是函数错误

2 个答案:

答案 0 :(得分:2)

问题:zoomsl不适用于jquery 3.3.1版本

错误:

  

解决方案:

     
      
  • 您需要在zoomsl-3.0.js中更改new Image() .load()功能

  •   
  • 在那里$("img").one("load", function() { ... }应用

  •   
  • 请在此处查看codepen示例

  •   

旧代码:

$.fn.imagezoomsl = function(options){
    options = options || {};        
    return this.each(function(){        
        if (!$(this).is("img")) return true;            
        var that = this;            
        setTimeout(function () {
            $(new Image()).load(function(){//this is old line
                sergelandimagezoomer.init($(that), options);
            }).attr('src', $(that).attr('src'));                
        }, 30);
    });
};

新代码:

$.fn.imagezoomsl = function(options){
    options = options || {};        
    return this.each(function(){
        if (!$(this).is("img")) return true;            
        var that = this;            
        setTimeout(function () {
            $("img").one("load", function() {//new code
                sergelandimagezoomer.init($(that), options);
            }).attr('src', $(that).attr('src'));                
        }, 30);
    });
};

您可以看到$("img").one("load", function() { ... }功能中已应用setTimeout

只需更改此行,它将开始工作。

此更改也将继续在旧版本的jquery中起作用。

希望您找到了解决方案,请随时提出问题。

答案 1 :(得分:0)

您还可以像这样更改代码

之前:

$.fn.imagezoomsl = function(options){
    options = options || {};        
    return this.each(function(){ //return jQuery obj        
        if (!$(this).is("img")) return true;            
        var that = this;
        setTimeout(function () {
            $(new Image()).load(function(){
                sergelandimagezoomer.init($(that), options);                    
            }).attr('src', $(that).attr('src'));                
        }, 30);
    });

};

之后:

$.fn.imagezoomsl = function(options){
    options = options || {};        
    return this.each(function(){ //return jQuery obj        
        if (!$(this).is("img")) return true;            
        var that = this;
        var img = new Image();
        setTimeout(function () {
            $(img).load($(that).attr('src'),function(){
                sergelandimagezoomer.init($(that), options);                    
            }).attr('src', $(that).attr('src'));                
        }, 30);
    });

};