2013-10-15 62 views
1
页面

我有这样的代码:的JQuery load()函数重载

$("a.ajax").on('click', function() { 
    ajax_link(); 
}); 

function ajax_link() { 
    $('#ajax_load').remove(); // Remove js 
    $('#section').html('<?php echo $this->ajax_loading; ?>'); 
    setInterval(function() { 
     $('#section').load($(this).attr('href')+'&ajax=true'); 
     return false; 
    }, 1000); 
} 

但是,当我点击链接它重新加载,而不是加载内容的页面。有谁知道为什么?

我添加了其余代码以确保它不是那样。

回答

1

您需要防止导致页面重新加载的锚点的默认行为。您可以通过event参数中可用的preventDefault()方法来完成。

$("a.ajax").on('click', function(e){ 
     e.preventDefault(); 
     ajax_link.call(this); 
}); 

的另一个问题是,setInterval的回调this内代表窗口,而不是你所点击的锚,所以缓存this上下文变量并使用它。

function ajax_link(){ 
var self = this; //Cache it here 
setInterval(function(){ 
    $('#section').load(self.href +'&ajax=true'); 
     return false; //You dont need this. 
    },1000); 
} 

或者只是将其绑定:

$("a.ajax").on('click', ajax_link); 


function ajax_link(e){ 
var self = this; //Cache it here 
e.preventDefault(); 
setTimeout(function(){ //Use setTimeout 
    $('#section').load(self.href +'&ajax=true'); 
     return false; //You dont need this. 
    },1000); 
} 
+0

这仍然无法正常工作。 '#部分'现在只是空白。 – Jay

+0

@Jay立即看到我的更新。 – PSL

+0

似乎仍然无法加载页面。你需要更多信息吗?如果是这样?谢谢队友 – Jay

0

使用e.preventDefault()

事件的默认动作不会被触发。

$("a.ajax").on('click', function (e) { 
    e.preventDefault(); 
    ajax_link(); 
}); 

,或者您可以如果您使用的是最新版本的jQuery的修改HTML

<a class="ajax" href="javascript:void(0)">Load ajax</a> 
+0

感谢您的支持和帮助 – Jay

+0

@Jay欢迎高兴地帮助:) –

0

,您可能会返回从您的单击事件处理程序错误。返回false将阻止default()和stopPropagation()。 StackOverflow有一个参考... event.preventDefault() vs. return false