2012-10-13 63 views
0

我有我的導航菜單按鈕下面的代碼:保留當前導航按鈕活躍

div onmouseover=\"changeBGColor(this,'#b90707');changeColor(this,'#fff');\" onmouseout=\"changeBGColor(this,'');changeColor(this,'#333');\" onClick="" class='navbtn'>Entry /div 

而下面的代碼,以保持元素活躍:

$('.navbtn').each(function(){ 
    var path = window.location.href; 
    var current = path.substring(path.lastIndexOf('/')+1); 
    var url = $(this).attr('onClick').substring(path.lastIndexOf('/')+18,$(this).attr('onClick').length-1); 

    if(url == current){ 
     changeBGColor(this,'#b90707');changeColor(this,'#fff'); 
     $(this).onmouseout = ''; 
     $(this).onmouseover= ''; 
    }; 
});  

元素保持活躍直到我將鼠標移到元素上。我想保持活躍隨時無論在哪裏我移動鼠標..似乎正在改變在onmouseout處理程序的背景色

+0

爲什麼你設置'mouseout'事件可言,如果你不需要它?請不要在元素屬性中使用內聯處理程序。它使代碼難以維護。 – feeela

回答

0

該代碼。如果這會將顏色恢復爲原來的顏色,請不要處理該事件以查看它是否保持不變。

編輯: 將處理程序設置爲空字符串看起來不正確。見Best way to remove an event handler in jQuery?

編輯:

像這樣的東西可能會更好:

$(this).unbind('mouseleave'); 

或(根據上面的鏈接,這是首選的方法):

$(this).off('mouseleave'); 

編輯:

對於這個工作,你將需要刪除您已建立了onmouseoveronmouseout內嵌處理器。這樣做的原因是,$(this).off('mouseleave');將無法​​正常工作,除非事件與jQuery的有線起來,$(this).onmouseover= '';也不會出於同樣的原因工作。

然後,您將需要線了事件處理程序與一些jQuery的:

$('.navbtn').mouseover(function() { 
    changeBGColor(this,'#b90707'); 
}); 

$('.navbtn').mouseout(function() { 
    changeBGColor(this, ''); 
}); 

現在,你正在做:

if(url == current){ 
    changeBGColor(this,'#b90707');changeColor(this,'#fff'); 
    $(this).onmouseout = ''; 
    $(this).onmouseover= ''; 
}; 

您可以改爲做:

if(url == current){ 
    changeBGColor(this,'#b90707');changeColor(this,'#fff'); 
    $('.navbtn').off('mouseout'); 
    $('.navbtn').off('mouseover'); 
}; 

這應該確保你剛剛設置的顏色保持原樣。

注意的jQuery 1.7+是必需的off語法工作。

+0

$(this).onmouseout =''//它應該將onmouseout代碼替換爲空...... –

+0

我試過所有你說過的,但它不起作用! –

+0

你能否更詳細地解釋一下什麼是行不通的?我發佈的例子對我來說工作得很好。 –