2008-09-30 46 views
17

我負責工作中的網站,最近我添加了ajaxy請求以使其更快,響應更快。但它提出了一個問題。中間點擊(新選項卡)和JavaScript鏈接

在我的頁面上,左側有一個索引表,就像一個菜單。一旦你點擊了它,它會發出填充頁面其餘部分的請求。在任何時候,您都可以點擊索引中的其他項目來加載其他頁面。

在添加javascript之前,有可能爲索引的每個項目進行中間點擊(打開新標籤頁),在我處理其中一個頁面時允許其他頁面加載。 但是因爲我已經將所有的鏈接都改成了ajax請求,他們現在執行一些javascript而不是真正的鏈接。所以他們只是在我點擊中間時打開空白標籤。

有沒有一種方法來結合這兩種功能:左鍵點擊時觸發javascript或中鍵點擊時新鍵的鏈接? 它是否必須是一些醜陋的JavaScript,捕捉每個點擊並相應地處理它們?

謝謝。

回答

0

可能的話,我可以每次提供兩個鏈接,一個觸發javascript,另一個是允許中間點擊的真實鏈接。 我想,其中一個必須是一個圖像,以避免超載索引。

1

這將需要一些測試,但我相信,當你點擊它們,這意味着只有鏈接是利用大多數瀏覽器不執行點擊處理程序。

不過,您的處理函數需要返回false以確保在正常單擊時不會使用這些鏈接。

編輯: 覺得這可以用一個例子:

<a href="/Whatever/Wherever.htm" onclick="handler(); return false;" /> 
21

是。相反的:

<a href="javascript:code">...</a> 

這樣做:

<a href="/non/ajax/display/page" id="thisLink">...</a> 

然後在你的JS,勾鏈接通過它的ID做AJAX調用。請記住,您需要停止點擊事件冒泡。大多數框架都有一個內置的事件殺手,你可以調用它(只要看看它的Event類)。

下面是jQuery的事件處理和事件殺手:

$("#thisLink").click(function(ev, ob) { 
    alert("thisLink was clicked"); 
    ev.stopPropagation(); 
}); 

當然,你可以有很多更聰明,而像這樣的雜耍的事情,但我想強調的是,這種方法是所以很重要比使用onclick屬性更清潔。

保持在JS的JS!

+1

這種方法唯一的「問題」是有人審查標記將無法立即看到有關聯的事件處理程序。 – Rob 2008-09-30 09:00:04

+1

我不會說這個問題。如果你用有意義的方式構造事物,你應該能夠看到JS,看看所有的事件鉤子在哪裏。如果你擔心的太多,你可以*設置相對於js,或用js_等預先設置ID。 – Oli 2008-09-30 10:08:55

0

onclick事件不會爲這種類型的點擊被解僱,所以你需要添加一個href屬性,它會實際工作。一種可能的方式通過添加#bookmark的URL來指示目標頁面所需的狀態是怎樣做到這一點。

3

是的,您需要查找漸進式增強功能和不顯眼的Javascript,並且編寫您的網站以便首先使用Javascript啓用,然後在基本網站工作後添加Javascript功能。

3

我喜歡Oli的方法,但是沒有從左側和中間點擊中辨別出來。檢查eventArgs上的「哪個」字段會讓你知道。

$(".detailLink").click(function (ev, ob) { 
    //ev.which == 1 == left 
    //ev.which == 2 == middle 
    if (ev.which == 1) { 
     //do ajaxy stuff 

     return false; //tells browser to stop processing the event 
    } 
    //else just let it go on its merry way and open the new tab. 
}); 
相關問題