7

我查看了很多相关的问题,我必须提出完全不同的问题,因为我只看到了一些似乎相关的问题。我正在通过 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。

4

2 回答 2

8

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

如果您要.load()加载中间 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,它在最初编写这个问题时就已经存在)。您可以在此处查看这些不同方法的比较。

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

于 2010-07-27T22:28:21.903 回答
4

克雷格,

我认为你正在努力解决这个问题。

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

其次:我不确定如果您添加日期选择器之类的方法,该方法的效果如何。我猜您不能在整个页面出现之前将日期选择器添加到元素中(只是猜测)。那些 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 相同。

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

于 2010-07-28T05:44:16.807 回答