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= '';
    };
});       

该元素保持活动状态,直到我将鼠标移到该元素上。无论我将鼠标移到哪里,我都想随时保持活跃..

4

1 回答 1

0

该代码似乎正在更改onmouseout处理程序中的背景颜色。如果这将颜色恢复为原来的颜色,请尝试不处理该事件以查看它是否保持不变。

编辑: 将处理程序设置为空字符串看起来不正确。请参阅在 jQuery 中删除事件处理程序的最佳方法?

编辑:

像这样的东西可能会更好:

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

或者(根据上面的链接,这是首选方法):

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

编辑:

为此,您需要删除为onmouseover和设置的内联处理程序onmouseout。这样做的原因是,$(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'); 
}; 

这应该确保您刚刚设置的颜色保持不变。

请注意,该off语法需要 jQuery 1.7+ 才能正常工作。

于 2012-10-13T09:16:35.413 回答