2011-03-10 135 views
1

爲什麼此代碼無法阻止頁面刷新?jQuery .live和頁面刷新問題

$('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; 
     }); 
    } 
}); 

回答

2

未經測試,但東西這樣會更簡單:

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

它做到了!+1 KISS的良好現實生活中的應用, – 2011-03-10 12:48:13

+0

@Majid因爲你將'live()'綁定到一個對象而不是一個選擇器,正如在多個答案中指出的那樣 – 2011-03-10 12:49:34

+1

只需要注意,它會綁定一個事件處理程序到所有錨點,可能是一個好主意,將它們過濾到你需要的那些:'$(「a [href * ='index.php']」)。live(「click」...'然後是不需要處理程序中的條件。 – karim79 2011-03-10 12:52:57

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(); 
}); 
+0

儘管這*是* true,它與代碼無法正常工作無關。 [例子](http://jsfiddle.net/ArondeParon/jLeFy/) – 2011-03-10 12:31:05

+0

好抓,把它改成'-1'並用'console.log(me);'進行測試。現在它正確選擇鏈接,但頁面刷新問題仍然存在:( – 2011-03-10 12:31:20

+0

@Majid - 此外,該代碼需要有一個'$(document).ready(...'wrap)以確保綁定將發生DOM已準備就緒 – karim79 2011-03-10 12:44:34

1

正如阿隆Rotteveel說,你需要實時調用一個選擇:

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

+1簡單和優雅,只是,正確的選擇是'$('a [href * =「index.php」]')' – 2011-03-10 16:14:58

+0

你是對的。 〜=含義單詞。我會改變答案。 – 2011-03-10 22:43:35