【问题标题】:jquery function only works once throughjquery 函数只能通过一次
【发布时间】:2013-02-28 15:46:01
【问题描述】:

我有一个带有缩略图的画廊类型页面。当您单击拇指时,它会将与该拇指有关的图像加载到隐藏的 div 中,当它们完成加载时,div 然后滑动打开。如果您单击另一个拇指,它将关闭 div,清除内容,加载新内​​容,然后再次打开它。当您加载页面时,您可以单击一个拇指,然后单击另一个,但是如果您返回第一个拇指并单击 div 将不会再次打开,不知道为什么。感谢您对此的任何帮助。

我在这里设置了一个 jsbin http://jsbin.com/epawub/12/edit

我为拇指设置的javascript如下:

var imgCount = 0;
var image=$('#images');

$('#klossviolins').click(function() {
  console.log("Loading...");
  $('#images').slideUp(500, function() {
    $("#images").empty().ready(function(){ 
        $("<img>", {
            src: "http://www.klossal.com/images/klossviolins/home.jpg"
        }).appendTo("#images").load(onImage);
        $("<img>", {
            src: "http://www.klossal.com/images/klossviolins/services.jpg"
        }).appendTo("#images").load(onImage);
    });     
  });
  $("#info_header").empty();
  $('#info_header').append("Kloss Violins Website");
});


$('#light_dance').click(function() {
  console.log("Loading...");
  $('#images').slideUp(500, function() {
    $("#images").empty().ready(function(){ 
        $("<img>", {
            src: "http://www.klossal.com/light_dance_1.jpg"
        }).appendTo("#images").load(onImage);
        $("<img>", {
            src: "http://www.klossal.com/light_dance_var.png"
        }).appendTo("#images").load(onImage);
        $("<img>", {
            src: "http://www.klossal.com/light_dance_2.jpg"
        }).appendTo("#images").load(onImage);  
    });     
  });
  $("#info_header").empty();
  $('#info_header').append("Dancing With Light Series");
});




function onImage(e)
{
    console.log("Image loaded");
    imgCount++;

    if (imgCount == image.children().length)
    {
        image.slideDown(500);
    }
}

【问题讨论】:

  • .ready 并没有按照您在代码中的想法进行操作。
  • 嗯,它有什么作用?
  • 在你的情况下绝对没有,它只是立即运行其中的代码,因为document 已经准备好了。
  • 有没有办法让准备函数中的东西在空的情况下才会运行?
  • 空是同步的,在它发生之前什么都不会发生。

标签: jquery


【解决方案1】:

在设置图片的src值之前必须先绑定load事件,否则如果图片被缓存,load事件会在绑定之前触发。

$("<img>").load(onImage).attr("src","http://www.klossal.com/light_dance_1.jpg").appendTo("#images");
// repeat for all similar

另外,请确保将 imgCount 重置为 0。

...
if (imgCount == image.children().length)
{
    image.slideDown(500);
    imgCount = 0;
    ...

【讨论】:

  • 所以我更新了 jsbin 并且同样的问题仍然发生,如果我点击第一个它们,它很好,然后第二个,它很好,然后回到第一个没有任何反应。 jsbin.com/epawub/15/edit
  • 您永远不会将 imgCount 重置为 0,请参阅编辑 jsbin.com/epawub/16/edit
  • awww 做到了,你就是那个人,非常感谢你花时间帮助我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多