ajax加载内容中的jQuery代码只运行一次

时间:2010-05-13 13:27:13

标签: jquery-ui jquery

我一直在寻找一段时间,并且找不到任何与我的问题相符的内容,我甚至不确定我能解释得那么好,所以请考虑一下它的价值。

我有一个页面通过AJAX(使用.load()方法)将内容加载到div中。导航中有几个链接,这意味着在浏览网站时内容会发生变化而不刷新整个页面。

(实际上,老实说,我刚刚从css-tricks.com中抄袭了DocTemplate布局[http://css-tricks.com/examples/DocTemplate/]。显然,虽然我不是一个重新发明轮式程序员,但我是一个bash my bash不停地靠着车轮让它上班的程序员。)

因此,index.php会在div中加载一些数据库内容。 index.php上还有一个jQuery UI模式输入表单。从本质上讲,页面上唯一的HTML是空div和表单。这一切都很好,直到我调用另一个页面,然后返回到index.php。没有加载数据库内容,我的表格显示在它的所有赤裸裸的荣耀。我知道为什么会这样。该页面未刷新,没有任何内容从代码中删除以加载内容并隐藏表单。

我的问题是,如何在再次加载index.php时确保运行AJAX .load()和.dialog()?它甚至可能吗?

谢谢,我的道歉。当我感到困惑时,我会变得冗长。

5 个答案:

答案 0 :(得分:0)

一个简单快捷的解决方案是禁用index.php的缓存。您可以通过发送适当的Http标头来实现。这样,您的页面将始终重新加载。

答案 1 :(得分:0)

你的问题不是很容易理解。您似乎使用浏览器的后退按钮返回index.php文件?

当您点击后退按钮时,浏览器会重新加载最初加载的页面(即处于任何用户交互之前的状态)。

因此,浏览器显示页面是正常的。

您想要处理后退按钮以及更常见的ajax应用程序中浏览器的历史记录,您可以使用现有的jquery历史插件,例如this one

我希望它会对你有帮助,

Jerome Wagner

答案 2 :(得分:0)

您可以添加一些逻辑,以便在页面加载完成后,您将检查是否填充了动态区域。如果不是,则运行.load()例程。

$(document).ready( function() {
    if( $('div#theDIV').find('something_that_should_be_there').length == 0 ) {
        $('div#theDIV').load('etc,etc')
    }
})

答案 3 :(得分:0)

我得到了它的工作。当再次加载内容时,我必须手动重新绑定.load()回调函数中的事件。

答案 4 :(得分:0)

问题是.bind()仅绑定当前存在的元素.bind()运行。由于您在以后使用ajax加载更多内容,因此在运行.bind()之后,新元素将不会绑定事件。 有两种解决方法:

  • 或者像你一样,在每次ajax加载后重新绑定元素
  • 或使用.live()而不是.bind() .bind()的语法类似于 $('element').bind('some-event', function() {blabla});。 'some-event'是你绑定的任何事件:click / submit / mouseover / etc. .live()完全相同:
    $('element').live('some-event', function() {blabla});

请注意,常见事件有简写符号:

$('element').click(function() {blabla}); // These are equivalent to   
$('element').bind('click', function() {blabla}); // You need to use .on()  
$(document).on('click', 'element', function() {blabla});