2012-01-26 186 views
0

我在我的網站上通過AJAX加載不同類型的內容。如何使網頁上的所有鏈接調用javascript函數?

我有一個javascript函數,將決定是否打開iframe中的鏈接或基於URL的新選項卡。但問題是如何讓所有鏈接調用該JavaScript函數?

我想:

<base target= processurl()/> 

任何想法?

感謝

編輯: jQuery的方法的偉大工程。但它只適用於一個鏈接?當我第一次點擊鏈接時,它會正確調用該功能。但是之後我點擊的任何其他鏈接都沒有任何反應。

+1

如果你有答案的註釋,點擊「添加註釋」離開它的答案下 – 2012-01-27 00:10:21

回答

4

使用jQuery < 1.7:

$('a').live('click', function(ev){ 
    ev.preventDefault(); // stop normal click on link 

    // do stuff 
}); 

注意的jQuery 1.7更喜歡使用的.on代替.live

$(document).on('click', 'a', function(ev){ 
    .... 
}); 
1

有(至少)兩種方式,你可以處理這個(視關於它如何適合您的Ajax代碼):

  1. Handl e所有點擊頁面上的常用功能,取消默認點擊導航,然後自行替換以加載iframe,新窗口等。
  2. 當頁面加載時處理頁面上的所有鏈接,將target屬性設置爲適當。

所以第一種方式:

$(document).on("click", "a", function(e) { 
    // stop default navigation 
    e.preventDefault(); 

    // 'this' is the particular 'a' that was clicked 
    var url = this.href; 

    // process url somehow as desired to decide whether to open it 
    // in new window, or iframe or to replace current page 
}); 

注意到.on() method從jQuery的版本> = 1.7適用,因此對於較舊的jQuery的使用.delegate() method真的老jQuery的使用.live() method

第二種方法(假設鏈接時,第一次加載頁面的所有存在):

$(document).ready(function() { 
    $("a").each(function() { 
     var url = this.href; 

     // process url somehow and set the target attribute as appropriate 
     // e.g. for a new window 
     this.target = "_blank"; 
     // or for an iframe 
     this.target = "nameofiframe" 
     // etc. 
    }); 
}); 
+0

有沒有區別在這種情況下,'live'和'delegate' – 2012-01-27 00:26:52

+0

@cwolves - 不錯,但我認爲越早使用'live()'的習慣越少,我不得不擔心是否/何時完全刪除未來版本的jQuery。 (儘管我仍然在使用'delegate()':碰巧我當前的項目停留在jQuery 1.4.4上,原因是沒有人可以解釋,儘管我不允許更改它。) – nnnnnn 2012-01-27 00:35:42

+0

仍然存在與方法相同的問題一。它工作一次,並不再工作:(我的意思是我點擊的第一個鏈接,iframe加載正常,但之後,沒有任何鏈接我點擊工作。 – user1137403 2012-01-27 03:41:58

相關問題