我用ajax动态查询出图片,想图片加载完成后显示出来,如何实现,这是我的代码。
$.ajax({
type:"POST",
url:app+"/querySiteArticleImageAJAX.do?pk="+pk,
success: function(data){
if (data != ""){
$("#article-image").html("<tr><td><img src=../css/loading.gif /></td></tr>");
var imageArr = data.split("|");
// 小于3张图片直接显示
if (imageArr.length <= 3){
var concent = "";
for (var i = 0; i < imageArr.length; i++){
var img = new Image();
img.src = "../../"+imageArr[i];
if($.browser.msie){
img.onreadystatechange = function(){
if(img.readystate == "complete" || img.readystate == "loaded"){
concent += "<tr><td><img src=../../"+imageArr[i]+" /></td></tr>";
}
}
}else if($.browser.mozilla){
img.onload = function(){
if(img.complete == true){
concent += "<tr><td><img src=../../"+imageArr[i]+" /></td></tr>";
}
}
}
} $("#article-image").html(concent);
}else{
}
}
}
});
$.ajax({
type:"POST",
url:app+"/querySiteArticleImageAJAX.do?pk="+pk,
success: function(data){
if (data != ""){
$("#article-image").html("<tr><td><img src=../css/loading.gif /></td></tr>");
var imageArr = data.split("|");
// 小于3张图片直接显示
if (imageArr.length <= 3){
var concent = "";
for (var i = 0; i < imageArr.length; i++){
var img = new Image();
img.src = "../../"+imageArr[i];
if($.browser.msie){
img.onreadystatechange = function(){
if(img.readystate == "complete" || img.readystate == "loaded"){
concent += "<tr><td><img src=../../"+imageArr[i]+" /></td></tr>";
}
}
}else if($.browser.mozilla){
img.onload = function(){
if(img.complete == true){
concent += "<tr><td><img src=../../"+imageArr[i]+" /></td></tr>";
}
}
}
} $("#article-image").html(concent);
}else{
}
}
}
});
$.ajax({
type:"POST",
url:app+"/querySiteArticleImageAJAX.do?pk="+pk,
success: function(data){
if (data != ""){
$("#article-image").html("<tr><td><img src=../css/loading.gif /></td></tr>");
var imageArr = data.split("|");
// 小于3张图片直接显示
if (imageArr.length <= 3){
var concent = "";
for (var i = 0; i < imageArr.length; i++){
var img = $("<img/>")
img.attr("src","../../"+imageArr[i]);
img.hide();
img.load(function(e){$(this).show();})
$("#article-image").append("<tr><td></td></tr>");$("#article-image tr:last>td").append(img); }
}
}else{
}
}
}
});
你$("#article-image").html(concent);应该放到onreadystatechange 或onload里面。。你这样concent的值一直为空
for (var i = 0; i < imageArr.length; i++){
var img = new Image();
img.src = "../../"+imageArr[i];
if($.browser.msie){
img.onreadystatechange = function(){
if(img.readystate == "complete" || img.readystate == "loaded"){
concent += "<tr><td><img src=../../"+imageArr[i]+" /></td></tr>";
}
}
}else if($.browser.mozilla){
img.onload = function(){
if(img.complete == true){
concent += "<tr><td><img src=../../"+imageArr[i]+" /></td></tr>";
}
}
}
} $("#article-image").html(concent);改成var concent = "",
el = $("#article-image");
for (var i = 0; i < imageArr.length; i++){
var img = new Image();
img.src = imageArr[i];
if($.browser.msie){
img.onreadystatechange = function(imgSrc){
return function(){
if(img.readystate == "complete" || img.readystate == "loaded"){
el.append("<tr><td><img src=../../"+imgSrc+" /></td></tr>");
}
}
}(imageArr[i]);
}else if($.browser.mozilla){
img.onload = function(imgSrc){
return function(){
if(img.complete == true){
el.append("<tr><td><img src="+imgSrc+" /></td></tr>");
}
}
}(imageArr[i])
}
}
img.onreadystatechange = function(imgSrc){
return function(){
if(img.readystate == "complete" || img.readystate == "loaded"){
el.append("<tr><td><img src=../../"+imgSrc+" /></td></tr>");
}
}
}(imageArr[i]);
}
你后面写的这个(imageArr[i])这个是什么意思,,没有看懂,,能否指点一下。
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
试试区别
1.
var els = document.getElementsByTagName("li");
for (var i = 0, j = els.length; i < j; i++){
els[i].onclick = function(){
alert(i)
}
}
2,
var els = document.getElementsByTagName("li");
for (var i = 0, j = els.length; i < j; i++){
els[i].onclick = function(i){
return function(){
alert(i)
}
}(i)
}
els.onclick = function(){
alert(i);
}
}这样做,每次alert出来的都只是i最后的值,这是因为js并没有java那种"块状作用域"
块状作用域简单举例就是,如
java:
for(int i = 0; i < 10; i++){
}
System.out.plant(i);//在这里面是访问不到i的而在js里面
for(var i = 0; i < 10; i++){
//scope
}
alert(i);//这里访问到得是i最后的值,这是因为这个例子与以下例子是等价的var i = 0
for(; i < 10; i++){
}
alert(i);在for循环声明i与在外面声明都是一样的,因此当我们触发onclick事件的时候,获取到得值是循环完毕后的i
alert(imgSrc);
if(img.readystate == "complete" || img.readystate == "loaded"){
$("#article-image").append("<tr><td><img src=../../"+imgSrc+" /></td></tr>");
}
}}(imageArr[i]);其中function(imgSrc)
这个函数的参数怎么传值,
for (var i = 0; i < imageArr.length; i++){
var img = new Image();
img.src = "../../"+imageArr[i];
if($.browser.msie){
img.onreadystatechange = function(){
if(img.readystate == "complete" || img.readystate == "loaded"){
concent += "<tr><td><img src=../../"+imageArr[i]+" /></td></tr>";
}
}
}else if($.browser.mozilla){
img.onload = function(){
if(img.complete == true){
concent += "<tr><td><img src=../../"+imageArr[i]+" /></td></tr>";
}
}
}
} $("#article-image").html(concent);改成var el = $("#article-image");
$.each(imageArr, function(i, path){
var img = new Image();
img.src = path;
$(img).load(function(){
el.append("<tr><td><img src=../../"+path+" /></td></tr>")
})
})