1

我希望我能很好地解释这一点。

我在 else if 语句中有 mousedown 和 mouseup 函数(这允许用户在页面中拖动对象并与根据某些模式运行的指针和鼠标事件相关)。

代码:

}else if(typeof mode !== 'undefined' && mode === 'move'){

        toolId =        'toolMove';
        this.deselectAllElems($svgContentRef);  
        fdtObj.dragMode = true;

        $('#formWrap').draggable( "option", "disabled", false ).addClass('dragCursor');
        $svgContentRef.css({ cursor: 'url(images/cursor_drag.gif),auto' });

        $('#formWrap').bind('mousedown',function() {
            $svgContentRef.css({ cursor: 'url(images/cursor_dragging.gif),auto' });
        });
        $('#formWrap').unbind('mousedown',event);

        $('#formWrap').bind('mouseup',function() {
            $svgContentRef.css({ cursor: 'url(images/cursor_drag.gif),auto' });
        });
        $('#formWrap').unbind('mouseup',event);
    }else{

        $svgContentRef.css('cursor','default');

    }

问题似乎是,当我单击另一种模式(当前模式之外)时,mousedown 事件仍在被触发。我怀疑未正确处理取消绑定。

非常感谢任何帮助。

4

3 回答 3

1

可变事件从何而来?它是处理程序传递的参数吗?

如果是这样,您必须传递给 unbind() 的是对您使用 bind() 或 live() 传递的相同函数的引用

所以,你可以做这样的事情:

$('#formWrap').bind('mousedown',function() {
        ....
        $(this).unbind('mousedown', this);
    });

在哪里$(this) refers to $('#formWrap')this refers to the function in scope

更新

而不是$('#formWrap').bind('mousedown',function() {...}); 这样做:

function handler(eventObject){
   .....
   $(this).unbind('mousedown', handler);
}

$('#formWrap').bind('mousedown', handler);
于 2012-05-16T13:49:27.747 回答
1

这是完整的功能。当客户端单击不同的模式时,一切都在重置光标选项方面工作。然而,在拖动模式下,拖动光标上的 mousedown 第一次工作,mouseup 也是如此,但它随后停留在 mouseup 选项上,即 mousedown 没有第二次触发,这里是代码:

    this.switchDesignMode = function(mode){

    fdtObj.dragMode = false;

    $('#formWrap').draggable({ disabled: true });
    $('#formWrap').removeClass('dragCursor').css('cursor','');
    //$('#formWrap').unbind('mousedown');
    //$('#formWrap').unbind('mouseup');

    designMode =                mode;                                                                           

    var $sideRef =              this.getCurrentSideRef(),                                                       
        $svgContentRef =        this.getSvgContentRef($sideRef),                                                
        $panelTools =           $('#panelTools'),                                                               
        toolId =                'toolPointer';                                                                  

    if(typeof mode !== 'undefined' && mode === 'text'){

        toolId =                'toolText';
        this.deselectAllElems($svgContentRef);                                                                  
        $svgContentRef.css('cursor','text');                                                                    

    }else if(typeof mode !== 'undefined' && mode === 'move'){

        toolId =                'toolMove';
        this.deselectAllElems($svgContentRef);                                                                  
        fdtObj.dragMode = true;

        $('#formWrap').draggable( "option", "disabled", false ).addClass('dragCursor');
        $svgContentRef.css({ cursor: 'url(images/cursor_drag.gif),auto' });

        function handler1(eventObject){
            $svgContentRef.css({ cursor: 'url(images/cursor_dragging.gif),auto' });
            $(this).unbind('mousedown', handler1);
        }
        $('#formWrap').bind('mousedown', handler1);

        function handler2(eventObject) {
            $svgContentRef.css({ cursor: 'url(images/cursor_drag.gif),auto' });
            $(this).unbind('mouseup', handler2);
        }
        $('#formWrap').bind('mouseup', handler2);

    }else{

        $svgContentRef.css('cursor','default');                                                                 

    }

    $panelTools.find('a').removeClass('active');                                                                
    $panelTools.find('a#' + toolId).addClass('active');                                                         

};

(我还尝试在函数顶部设置取消绑定选项,但这不起作用。

希望这很清楚。大号

于 2012-05-17T08:49:17.690 回答
0

试试这个:

   $('#formWrap').bind('mousedown',function() {
        $svgContentRef.css({ cursor: 'url(images/cursor_dragging.gif),auto' });
        $(this).unbind('mousedown');
    });

您还可以使用onoff方法:

   $('#formWrap').on('mousedown',function() {
        $svgContentRef.css({ cursor: 'url(images/cursor_dragging.gif),auto' });
        $(this).off('mousedown');
    });
于 2012-05-16T13:48:54.527 回答