2012-09-24 62 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

我知道 - 道歉,它不是一个容易说清楚的问题,所以尽我所能保持简单。 –