jQuery .live和页面刷新问题

时间:2011-03-10 12:16:38

标签: javascript jquery

为什么此代码无法阻止页面刷新?

$('a').each(function() {
    var me = $(this);
    var mytarget = me.attr('href');
    var is_link_to_self = mytarget.indexOf("index.php");
    if(is_link_to_self !== false) {
        me.live('click', function() {
            $('#content').load(mytarget);
            return false;
        });
    }
});

4 个答案:

答案 0 :(得分:2)

我认为问题是由于以下条件而没有任何东西与你的锚点绑定:

if(is_link_to_self !== false) {

应该是:

if(is_link_to_self !== -1) {
当没有匹配发生时,

indexOf将返回-1,这是假的,但不完全是假的(如false布尔值),因此条件永远不会评估为真。

编辑:我建议采用以下更简洁的方法:

$("a").filter(function() {
   return this.href.indexOf('index.php') !== -1; 
}).live("click", function(e) {
   $("#content").load(mytarget);
   e.preventDefault(); 
});

答案 1 :(得分:2)

indexOf运算符返回int而不是boolean,你应该检查-1,而不是检查:http://www.w3schools.com/jsref/jsref_IndexOf.asp

答案 2 :(得分:2)

未经测试但这样的事情会更简单:

$('a').live('click', function() {
  if ( $(this).attr('href').indexOf("index.php") > -1 )
  {
    $('#content').load( $(this).attr('href') );
    return false;
  }
});

答案 3 :(得分:1)

正如Aron Rotteveel所说,你需要在选择器上直播:

$('a[href*="index.php"]').live('click', function() {
        $('#content').load($(this).attr('href'));
        return false;
    });