使用ajaxified内容(jQuery)做一些事情

时间:2011-03-06 22:39:16

标签: javascript jquery html css ajax

HTML:

<div>
<img src="image.png" />
</div>

JS:

$("div img").animate({opacity:.5}, 200);

这个js在加载页面后效果很好。但是不处理由ajax加载的内容。给定js代码只是一个例子。

问题是,如何使一些js代码适用于ajaxified内容?


尝试过这种方式:

function loadDone(){
    $("div img").animate({opacity:.5}, 200);
};

loadDone();

$.ajax({
    url: "test.html",
    success: function(){
        //do something
        loadDone();
    }
});

但它不起作用。

我知道如何添加触发器,问题是,此代码不使用任何。一旦页面加载然后停止,它就会起作用。也应该为ajaxified内容工作。

5 个答案:

答案 0 :(得分:1)

你的问题有点模糊,但这可能会有所帮助。

假设您在文档就绪时运行此代码:

$(function() { 
  if ($("div img").width() > $("div").width()){
    $("div img").css({"width": $("div").width()});
  }
});

您可以在ajax回调中重复此调用:

$("#some_div").load("/html_fragment_with_cool_image", function() { 
  if ($("div img").width() > $("div").width()){
    $("div img").css({"width": $("div").width()});
  }
});

或者,更进一步将其包装在一个函数中。

function doDivStuff() {
  if ($("div img").width() > $("div").width()){
    $("div img").css({"width": $("div").width()});
  }
}

然后在需要时调用它。

$(function() { 
  doDivStuff();
});

$("#some_div").load("/html_fragment_with_cool_image", function() { 
  doDivStuff();
});

答案 1 :(得分:0)

不确定我是否理解您的问题,但是在将ajax内容加载到当前页面的DOM后,您必须运行JS。

只需在ajax onsucess回调(jquery)上执行此操作

答案 2 :(得分:0)

对于事件,您可以使用live命令而不是绑定。这将使事件触发通过ajax加载的内容。

对于像您的示例这样的代码,您需要在通过ajax加载任何HTML后运行该代码。通常这将来自ajax调用的成功回调。

答案 3 :(得分:0)

取决于您从哪里调用此代码。

您的Ajax呼叫将进行回叫。只需从中调用此代码即可。

$(document).ready(function() {
  //call the method when the page loads
  setImageWidth();
}

function setImageWidth() {
  if ($("div img").width() > $("div").width()){
      $("div img").css({"width": $("div").width()});
  }
}

function doSomeAjax() {
  $.ajax({
    type : "GET",
    url : 'http://somepath',
    success :
    // Call the method when receive successful response
    function(response) {
        setImageWidth();
     }
  });
} 

答案 4 :(得分:0)

在Ajax调用之后,您可能需要执行相同的函数来修复img宽度。您还可以考虑在修改的img上放置一个类(或数据),并在后续调用resize函数时对该类进行过滤。

var resizeImages = function() { 
    if ($("div img").width() > $("div").width()){
        $("div img").css({"width": $("div").width()});
    }
}

//You could use the global event callback or 
//attach to the individual ajax requests that you know will add images
$(document.body).ajaxSuccess(resizeImages);
相关问题