在AJAX加载后操纵元素()

时间:2010-09-29 17:11:17

标签: jquery ajax

我在使用.load()加载它们之后尝试操作一些元素。我已经正确加载了所有内容,但我似乎无法定位任何已加载元素中的任何元素。这似乎很容易,但我可以把手指放在上面。

我在元素加载后使用回调,但DOM似乎不知道它们的存在?

function load_page(){
    $('#page_name').load("/page-name/ .page", null, load_complete());
}

function load_complete() {
    $('#page_name .book_img').addClass('hello');
}

好的,这就是我现在所处的位置。我添加了......

$('#wrapper').ajaxComplete(function() {
    $('#page_name .book_img').addClass('hello');
}

哪个有效。 .autoComplete与使用.load()函数打包的回调之间必须存在差异。我不是很喜欢这个,因为每次AJAX事件加载完成时都会调用它,但它确实让我在未来的路上走得更远。

有人有什么更好的吗?

[编辑]

我也试过......

$('#wrapper').ajaxComplete(function() {
    $('#page_name .book_img').addClass('hello');
}

这很好,因为它在调用函数之前等待所有AJAX调用完成。也许这是实现它的方法,但似乎.load()函数仍然可以解决这个问题?

3 个答案:

答案 0 :(得分:2)

看起来像执行回调函数而不是将其传递给加载方法:

function load_page(){
    // $('#page_name').load("/page-name/ .page", null, load_complete());
    $('#page_name').load("/page-name/ .page", null, load_complete);
}

function load_complete() {
    $('#page_name .book_img').addClass('hello');
}

因此传递给load方法的内容为null,因为load_complete

中没有返回值

答案 1 :(得分:0)

您必须包含用于操作已加载项目中已加载对象的javascript。这是因为它已经浏览了所有的javascript。

修改

试试这个,将异步性设置为false,这样你就可以在加载后添加一个回调。

$.ajax ({
  async: false,
  type: "GET",
  dataType: "html",
  url: "/page-name/ .page",
  complete: function(){load_complete()};
});

<强>更新

嘿,还有我偶尔使用的这个简写语句。让我感到惊讶的是,这些不适用于您的脚本..

$.get($(this).attr('href'), function(response) { $('#content').html(response); });

答案 2 :(得分:0)

有时HTML需要一些时间来渲染。尝试在访问新内容之前添加延迟:

$('#page_name').load("/page-name/ .page", null, window.setTimeout(function(){load_complete()},50);