尝试使用jquery hasClass来打破悬停功能

时间:2012-05-24 12:26:16

标签: jquery html class jquery-selectors traversal

我试图在满足某个条件时断开一个函数(一个元素有一个类,这个类被动态地加上和减去)

代码:

this.buildMainToolsBar = function(options,display){

    var all =                       options.all || null,                                                        
        $mainToolsBarRef =          $('#mainToolsBar'),                                                         
        $disabledTools =            $('#mainToolFill, #mainToolStrokeStyle, #mainToolStrokeColour');

    if($disabledTools.hasClass('toolDisabled1')) {

        return;

    }else{

        $('form [id^=mainTool] > .toolInfo, form [id^=mainTool] > .navDown',$mainToolsBarRef).hover(function(){     

            $(this).parents('div[id^=mainTool]:not([id=mainToolsBar]):first').addClass('toolHover');            

        },function(){

            $(this).parents('div[id^=mainTool]:not([id=mainToolsBar]):first').removeClass('toolHover');

        });

    } 

只有在单击特定元素时才会显示类toolDisabled1。问题似乎是即使在找到toolDisabled1之前条件仍然返回true。

而不是:

return;

我也尝试过:

$disabledTools.removeClass('toolHover');

试图打破这个功能。

我也试过

('$disabledTools[class=toolDisabled1]').removeClass('toolHover');

如何动态检测是否已添加toolDisabled1类,从而返回函数?

希望如果您需要更多代码让我知道,这一点很清楚。

2 个答案:

答案 0 :(得分:0)

问题可能在于变量$disabledTools正在选择多个元素。如果此jQuery选择中的任何一个元素具有类toolDisabled1,则if语句将返回true。

当您进行检查时,班级toolsDisabled1是否适用于这些元素中的任何一个($('#mainToolFill, #mainToolStrokeStyle, #mainToolStrokeColour'))?

答案 1 :(得分:0)

也许您可以尝试使用.on方法设置悬停事件。然后你通常会添加toolDisabled1类(选择你所谓的iso元素),你可以关闭你的悬停事件。然后在必要时(单击画布上的任何其他位置或返回矩形),您可以重新设置悬停事件。

我在这里写了一个小技巧的例子:http://jsfiddle.net/XyDUV/