2011-08-18 21 views
2

這是我有:全局JavaScript鏈路處理器

  • ,在一個HTML頁面運行的Web應用(稱之爲myapp.req),與內容來,並通過AJAX去
  • 應用程序可從外部進入與作爲myapp.req?id=123這樣的鏈接,以及應用在ID打開與項目選項卡123
  • 頁面上的內容大多是用戶的內容,並多次有內部應用程序鏈接到myapp.req?id=123
  • 的問題是,CLIC王myapp.req?id=123鏈接重新加載瀏覽器,並刪除該用戶就裝

我要的是能夠趕上鍊接點擊其目的地爲myapp.req?id=123,而不是重新加載頁面的任何內容或狀態,就打開項目123的選項卡,留下當前單獨加載的任何其他內容。但是,如果鏈接是針對外部網站的,顯然只是讓瀏覽器離開。

所以我的問題真的:我可以有一個全局鏈接處理程序,檢查我是否要處理鏈接點擊,如果是的話,運行一些JavaScript,不要離開?

我知道我能找到的所有<a> S和添加偵聽器,但我的希望是,該解決方案將只需要一次設置監聽器,並且不添加每一個新的內容網頁上加載時間鏈接處理。由於內容可以以許多不同的方式加載,因此將代碼添加到所有這些位置會很麻煩。

這有道理嗎?感謝您的任何幫助或建議!

回答

1

當然可以。在身體上添加點擊處理程序。所以你抓住所有的點擊。然後,您必須檢查事件的目標或其父項之一是否與您的特定href鏈接。在這種情況下停止事件並打開選項卡。

+0

這就是我所需要的。謝謝! –

0

更新使用.live代替.click

如果你使用jQuery,您可以添加一個「活」的點擊事件處理程序,以每a href一次:

<body> 
    <a href="app.req?id=123&test=432">click here</a> 
    <br/> 
    <a href="http://whatever.com">whatever</a> 
</body> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$('a').live('click',function() { 
    var myID = $(this).attr('href').match(/id=([a-zA-Z0-9_-]*)\&?/)[1]; 
    if (myID) { 
     //run code here 
     alert(myID); 
     return false; 
    } 
}); 
</script> 

這應該提取ID來自href的查詢字符串,並讓你做任何你想做的事情。

+0

不幸的是,這是我試圖避免的。您提供的代碼只會爲當前頁面上的每個鏈接添加偵聽器,但頁面內容始終在變化,並且新鏈接可能會經常渲染。因此,我需要在每次渲染新內容時運行代碼。相反,我希望能夠在瀏覽器離開頁面之前單擊任何鏈接時始終運行的全局監聽器。 –

+1

而不是點擊使用現場..它應該照顧任何新的元素進入頁面.. – Baz1nga

2

jQuery's live是你所需要的:

$('a').live("click", function() { 
    var myID = $(this).attr('href').match(/id=([a-zA-Z0-9_-]*)\&?/)[1]; 
    if (myID) { 
     //run code here 
     alert(myID); 
     return false; 
    } 
}); 

任何鏈接後,都會有這樣的點擊處理程序是否這就是所謂與否之後它被添加。

+0

不幸的是,jQuery不是現在我的應用程序中的一個選項,所以我用另一個答案作爲解決方案。儘管感謝這個信息! –