JQuery $(document).ready ajax load

时间:2010-07-27 22:14:57

标签: jquery html ajax function document-ready

我查看了很多相关的问题,我必须要求这完全不同,因为我只看到了一些似乎有关的问题。 我正在通过JQuery Ajax调用加载整个中间div,我只是希望能够在新的区域上执行一些自动JQuery,如$(document).ready允许在加载DOM时。我读到livequery会这样做,但我认为会有一种内置方式。我正在尝试将日期选择器添加到开头的输入字段中。

这是调用后端内容的内容,然后会提取某些特定部分。

$.post("ReportingWizard",$("#wizard_form").serialize(), function (data) { setData(data); });

function setData(data) {
divElement.innerHTML = data;
$(activeTab).fadeIn(); //Fade in the active content
$(".wizardBody").fadeIn();
}

在该divElement中放置的文件内部将有一个需要运行的JQuery方法来更改其中的html。

2 个答案:

答案 0 :(得分:8)

在AJAX函数的回调中注册事件。

如果您正在使用.load()加载 middle div ,请将您的jQuery代码直接放在回调中:

$('#middleDiv').load('/fish.php', function () {
    $('#someDiv').fadeIn(300); // ? whatever
});

如果您正在使用其他一些AJAX函数,请将jQuery代码放在将元素添加到回调中的DOM的行之后:

jQuery.get('/fish.php', function (response) {
    $('#middleDiv').html(response);

    $('#someDiv').fadeIn(300); // ? whatever
});

如果你想要绑定它的事件,你可以考虑使用。on()(或。delegate().live()如果你使用的是旧版本的jQuery,它们都是当这个问题最初写的时候)。您可以看到这些不同方法的比较here

这些方法允许将事件绑定到元素,即使它们尚未存在于DOM中;这意味着您可以绑定$(document).ready()块中的事件,即使这些元素尚未在DOM中注册。

答案 1 :(得分:4)

克雷格,

我认为你正试图以艰难的方式解决这个问题。

首先:虽然技术上可以在将它们注入页面之前使用javascript / jquery操作响应,但在添加它们之后立即执行此操作会更容易(根据文档准备好)

其次:如果你添加像datepicker这样的东西,我不确定该方法的效果如何。我猜你不能在整个事物进入页面之前向元素添加一个datepicker(只是一个猜测)。那些jQuery UI小部件在后台发生了很多事情。

我建议你遵循马特的建议。

如果你调用$ .post,回调函数与你的$(document).ready函数相同,只要响应可用就会调用它,所以你可以这样做:

$.post(url, data, function(response) {
    $("#some_element").append(response);
    // Now your element has been injected you can do whatever u like here
    // call some function etc.
});

这是最好的方法。一旦数据被注入您的页面就会像$(document).ready一样完成操作。

如果您认为您正在做的事情存在一些延迟,并且您不希望用户看到,则将显示设置为隐藏,然后在操作完成后淡入或显示。