bug描述:
后台管理图片插件的列表(admin_image.htm),点击缩略图片显示大图的功能:只有第一个图片的大图显示正常,第二个及以后的其它图片都是无限载入,无法显示了。
查bug过程:
查图片悬停的文字,找到admin_image.htm
页首的js段落里面有如下内容
$(document).ready(function(){ $("img").each(function(i){ var img = this; img.title="点击浏览大图"; }).click(function(){ var url=$(this).attr("src"); $.dialog.open('image', '图片浏览', 'img:'+url); });
先检测url的正确性:在url变量后面加一句“alert(url);”。发现没有问题。
那么就是document.ready()可能出问题了;全站查找document.ready(),发现是一个js文件里面的东西,/js/jquery.dialog.js
打开之后进行alert检查问题,都无效。莫非,用的不是这个?
在此全站查找jquery.dialog,发现还有两个文件,一个是jquery.dialog-0.8.js、一个是jquery.dialog-0.8.min.js。继续查找,发现header实际调用的是jquery.dialog-0.8.min.js这个文件。
打开后发现根本无法编辑,为了减小文件大小,把所有的注释都去掉了,还将所有的中文改成了utf8码。
于是改admin_header为引用jquery.dialog-0.8.js,编辑之后发现
if (options.type == 'url'){
url = options.url; if (self.config.url == url){ self.show(id); return self; } self.config.url = url; self.setContent(id, self.config.htmlImgLoading); $.get(url, function(data, state){ if (self.isClose[id]){return} if (state == 'success'){ self.setContent(id, data); self.reset(id); if($.IE) self.reset(id, 200); if ($.isFunction(options.callback)){options.callback(dialog)} }else { self.setContent(id, "Loading failure!"); } }); }else if (options.type == 'img'){ url = options.url; if (self.config.url == url){ self.show(id); return self; } self.config.url = url; self.setContent(id, self.config.htmlImgLoading); var pos = self.getPosition(id); dialog.css({top:pos.top,left:pos.left,opacity:''}); var img = new Image(); img.onload = function(){ //if (self.isClose[id]){return} 被我注释掉了,以正常显示网站的大图 var width = img.width >950 ?950 : img.width; self.setContent(id, ''); self.reset(id); if($.IE) self.reset(id, 200); if ($.isFunction(options.callback)){options.callback(dialog)} } img.onerror = function(){self.setContent(id, options.error)} img.src= url; self.parts[id].content.dblclick(function(){$.dialog.close(id)}); }else if(options.type == 'iframe'){......后略
显然options.type == 'img'这一段是重点关注对象!
对与type为img的,指定url。
判断url是不是现在的url,如果是,直接打开即可。
指定url,指定css样式,实例化图像文件,加载图像。
加载图像时,有一条语句是判断self是不是关闭。如果关闭,就直接返回。
if (self.isClose[id]){return}
我使用alert测试,不管怎麽测试,除了第一个图片,后面的都是为真,这里img.onload就直接return了。后面的就自然没有任何反应了。
我想不明白为什么要加这个判断条件。所以还是直接把这条注释掉了,bug解除。
解决办法:
注释掉“if (self.isClose[id]){return}”即可
按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
→我们致力于为广大网民解决所遇到的各种电脑技术问题 如果您认为本词条还有待完善,请 编辑词条
上一篇hdwiki无法上传图片
下一篇