2012-09-24 61 views
-1

好吧,所以需要通過jquery更改鏈接。下面的代碼工作正常,但它立即行動。我只需要點擊下一次點擊鏈接,而不是當前點擊鏈接。希望這是有道理的?JQuery:更改href鏈接,但只能在下一次點擊

任何幫助表示讚賞。

$("#m-menu").click(function(){ 
$("#menu").animate({right: 0}, 500, "easeInOutCirc"); 
$(this).text($(this).text() == 'HOME' ? 'HOME' : 'HOME'); 
$(this).attr('href', 'http://backtohomepage.com'); 
}); 


編輯:感謝所有的答案傢伙 - 它並不像作爲每隔一個點擊的解決方案和大的道歉不更清澈第一次輪簡單。這裏是源代碼頁面(爲了更好地說明我的需求,我沒有在上面應用.attr代碼):http://joinersart.co.uk/mtest

基本上,當用戶單擊左/右箭頭瀏覽圖庫時,看菜單欄縮小。爲了恢復,請點擊「菜單」。一旦它再次退出,「菜單」文本將變爲「主頁」,並具有新功能 - 鏈接到主頁。當然,如果再次點擊左/右箭頭,它會切換回「MENU」並將其功能改回到展開菜單欄。所以基本上這個鏈接有兩個功能(主頁鏈接 - 「HOME」或菜單欄擴展 - 「菜單」),取決於菜單欄是否伸出或縮進。

當我嘗試要應用上面的.attr代碼,會發生什麼 - 用戶單擊「MENU」鏈接而不是菜單欄展開,它們會立即被帶到主頁,因此它會過早地激活鏈接,並執行click函數。我需要做的是擴大菜單欄,並首先將文本從「MENU」更改爲「HOME」。只有當用戶點擊它時,纔會進入主頁。

+2

什麼是第一次點擊的點?或者你想只響應雙擊?你是否考慮過從animate方法的回調中重新設置click事件(假設你只希望它在動畫完成後表現不同)? – Sampson

+4

這是什麼:'$(this).text($(this).text()=='HOME'?'HOME':'HOME')'?該條款沒有任何意義。 – VisioN

+1

@VisioN - 它非常有意義,它只是一個同義反復。 – Blazemonger

回答

2
$('#m-menu').click(function() { 
    // Do the work here 
    $(this).unbind('click'); 
    $(this).click(function() { 
      $(this).attr('href', 'http://backtohomepage.com'); 
    }) 
}) 
0

您的意思是?

var nbclicks = 0; 
$("#m-menu").click(function(){ 
    $("#menu").animate({right: 0}, 500, "easeInOutCirc"); 
    if (nbclicks++==1) { 
      $(this).text($(this).text() == 'HOME' ? 'HOME' : 'HOME'); 
      $(this).attr('href', 'http://backtohomepage.com'); 
    } 
}); 
+0

這行很奇怪:'$(this).text($(this).text()=='HOME'?'HOME':'HOME');' –

+0

lol yeah .. why not $(this )的.text( 'HOME'); –

1

你可以這樣來做:

$("#m-menu").one('click', function(){ 
    $("#m-menu").click(function(){ 
     $("#menu").animate({right: 0}, 500, "easeInOutCirc"); 
     $(this).text($(this).text() == 'HOME' ? 'HOME' : 'HOME'); 
     $(this).attr('href', 'http://backtohomepage.com'); 
    }); 
}); 

http://api.jquery.com/one/

+0

不,一個人的工作方式不同。它需要一個事件被綁定。 – VisioN

+0

一個應該綁定該功能,所以第一次點擊就像一個正常的行爲。 –

+0

@BartekBanachewicz我認爲他意味着你沒有指定一個事件..即。 '$(element).one('click',function()' –

0

你想對你點擊一次的點擊會出現?

如果是這樣的話,那麼你可以做到這一點

$(function() { 
    var counter = 0; 
    $("#m-menu").click(function(){ 
     counter ++; 
     if(counter % 2 == 0){ 
      $("#menu").animate({right: 0}, 500, "easeInOutCirc"); 
      $(this).text($(this).text() == 'HOME' ? 'HOME' : 'HOME'); 
      $(this).attr('href', 'http://backtohomepage.com'); 
     } 
    }); 

}); 

這將確保你的代碼是在每一個執行甚至單擊

+0

感謝所有的答案。 - 請參閱我上面的編輯 –

+0

那麼你究竟想在這裏做什麼..你的問題不清楚.. –

+0

我知道 - 道歉,它不是一個容易說清楚的問題,所以盡我所能保持簡單。 –