2011-08-05 47 views
0

如果用戶選擇在新選項卡或窗口中打開指向該網站的鏈接,我想用fancybox在iframe中打開網站,然後需要交付不同的佈局(完整佈局)。用jQuery改變HREF,只需點擊鼠標左鍵即可點擊該按鈕

正常的鏈接會彈出整個頁面,但如果我在末尾添加& type = 77,我的CMS知道它應該提供適合iframe的精簡版本。如果用鼠標左鍵單擊鏈接,以下代碼將附加「& type = 77」。

$('#mylink').mousedown(function(event) { 
     if(event.which == 1) { 
      var actualHref = $(this).attr("href"); 
      $(this).attr("href", actualHref + "&type=77"); 
     } 
    }); 

這很好用,但它每一次點擊都會附上部件。所以,如果我離開點擊一次並關閉fancybox並在之後點擊右鍵(在新標籤中打開),那麼我仍然會得到帶有附加部分的新URL。並且每次點擊都會附加該部分。

我試圖使用window.location來改變網址,而不是改變網址 - 部分工作,它提出了正確的網址,但它打破了fancybox。 fancybox開始加載,但隨後它被重定向到新頁面。

也許對此有更好的方法。提前致謝。

回答

3

使用 .one方法:

$('#mylink').one("mousedown", function(event) { 
     if(event.which == 1) { 
      var actualHref = $(this).attr("href"); 
      $(this).attr("href", actualHref + "&type=77"); 
     } 
    }); 

更新 花式框可以接受的HREF當您指定的插件打開的物體,所以做這樣的事情:

$("#mylink").each(function(){ 
    var $this = $(this); 
    $this.fancybox({"href": $this.attr("href")+"&type=77"}); 
}); 

(有些人可能知道的比/使用each單個元素不喜歡一個更好的辦法,但我不認爲這真的很重要單個呼叫)

+0

我不知道一種方法,但在這種情況下,它似乎沒有多大幫助。 - 它添加了部分,但添加的部分保留,所以對於下一個「在新標籤中打開」,該部分仍然存在,它不應該是。 – Novi

+0

啊好吧,我現在得到你需要的東西,對不起,我有點撇棄這個問題(壞習慣!),我認爲你最好在fancybox激活碼中做這件事,在那裏追加類型,而不是改變物理href,你最喜歡的代碼鉤入fancybox? – Psytronic

+0

我需要更改href以讓我的CMS知道它應該爲該頁面提供另一個佈局。我只是像這樣激活fancybox $(「#mylink」)。fancybox(); – Novi

1

我希望這能解決的問題:

var myLink = $('#mylink'); 
     var actualHref = myLink.attr("href"); 

     myLink.one("mousedown", function (event) { 
      if (event.which == 1) { 
       $(this).attr("href", actualHref + "&type=77"); 
      } 
     }); 
     myLink.one("mouseleave", function (event) { 
      if (event.which == 1) { 
       $(this).attr("href", actualHref); 
      } 
     }); 
+0

同樣的問題與Psytronics答案。這隻能解決問題,即「&type = 77」不再多次添加。 – Novi

+0

你能發送一個鏈接嗎?我很難想象這是什麼問題 – XGreen

+0

恐怕我無法提供鏈接。問題簡而言之:我已經鏈接到一個以「index.php?id = 59」結尾的地址,並且只有在有人正常點擊鼠標左鍵時,該鏈接纔會被修改並指向「index .php?id = 59&type = 77「 - 但它應該保持它在源代碼中的樣子。 – Novi