2009-11-18 24 views
0

我从数据库中提取一些信息,然后将其放入DIV并将所有内容注入到我的页面。我的问题是在完成加载后定位新注入的DIV。位置注入的DIV使用JQuery的“加载”功能

这里是我的jQuery:

$j(document).ready(function() { 
    $('a#load-content').click(function(event) { 
     event.preventDefault(); 
     var productId = $j(this).attr('id').replace(/more-info-/, ''); 

     $j.getJSON('../json/quicky/product/id/' + productId, function(json) { 
     var productImage = json.image; 
     var html = '<div class="quick-info"><img src="' + json.image + '"/></div>'; 

     $j(body).append(html); 
     }); 
    }); 

    $j('div.quick-info').load(function() { 
     positionBoxCenter(); 
    }); 
}); 

我试过把负载事件负载内容点击事件后的快速信息DIV的的getJSON回调函数内,负载内容点击事件之前,并在加载内容点击回调函数中。我仍然无法工作。

我在做什么错误的加载函数?

回答

2

它在你的成功处理程序的位置,你已经有了:

$j.getJSON('../json/quicky/product/id/' + productId, function(json) { 
    var html = '<div class="quick-info"><img src="' + json.image + '"/></div>'; 

    $j('body').append(html); 
    positionBoxCenter(); 
    }); 

与负载的问题是,你必须让这个处理器满载的元素之前......我从来没有使用过它因为这是一个痛苦:)

个人而言,我会写positionBoxCenter作为快速jQuery插件,做更多的东西是这样的:

$j.getJSON('../json/quicky/product/id/' + productId, function(json) { 
    var html = $j('<div class="quick-info"><img src="' + json.image + '"/></div>'); 
    // so now html is actually a jquery extended element 
    html.positionBoxCenter(); 
    $j('body').append(html); 
    }); 

这样,您就可以使用jQuery在它甚至被添加到dom之前设置它的定位。或者,您可以尝试在执行追加操作之前附加该负载处理程序(您仍然需要扩展该元素)。

+0

感谢您的快速回答。 – Jonnie 2009-11-18 15:09:34

0

尝试使用$().live

$j('div.quick-info').live('load', function() { 
     positionBoxCenter(); 
    }); 

与jQuery 1.3.2 因为div.quick-info不当时存在你尝试绑定load

也仅供参考。一般情况下,$('#load-content')选择比$('a#load-content')

0

问题是你正试图绑定一个事件处理程序到'div.quick-info'之前这样的元素存在。 (当$(document).ready()执行时,div还没有被添加)

使用thenduks在成功处理程序中完成动作的建议。

0

您正在创建您的div在ready函数中,一旦点击了#个加载内容就会调用它。

但是,您正在立即设置加载事件。该JavaScript将会在页面加载时执行,这将在div创建之前进行。

我会把它在功能的getJSON的结尾,像这样:

$j.getJSON('../json/quicky/product/id/' + productId, function(json) { 
    var productImage = json.image; 
    var html = '<div class="quick-info"><img src="' + json.image + '"/></div>'; 

    $j(body).append(html); 
    positionBoxCenter(); 
    }); 
0

负载事件并不适用于DIV,因为它根本就没有装。

完全跳过加载事件,只是将代码放置在将元素添加到主体的代码之后。