MouseDown事件不适用于整个容器

时间:2014-04-09 18:21:14

标签: javascript jquery mouseevent

我的问题是当右侧按钮发生mousedown事件时我需要检查是否有div如果没有,那么我的flag全局variable会变为假,但我是没有达到那个条件。

我的jQuery脚本如下。

var flag = true;
   $(document).mousedown(function(event){
            if( event.button == 2 ) {
                if ($(event.target).parent().is('.draggable')){
                    $el = $(event.target).parent();
                    flag = true;    
                }else{
                 flag = false;          
            }   
        }
    });

jsp代码:

<div class="main">    
<div class="draggable" >
        <a href="#"><div class="inside"></div></a>

    </div>
</div>

2 个答案:

答案 0 :(得分:2)

试试这个我认为还需要一个父母。希望它会奏效。 因为几个月前我遇到了同样的问题。

$(document).mousedown(function(event){
                if( event.button == 2 ) {
                    if ($(event.target).parent().parent().is('.draggable')){
                        $el = $(event.target).parent().parent();
                        flag = true;    
                    }else{
                     flag = false;          
                }   
            }
        });

答案 1 :(得分:1)

我认为你需要的是使用nearest()方法,因为结构有时会有所不同

所以你的代码可能就像

$('mousedown',function(event){
    var $draggable;
    if( event.which == 2 ) {
        $dragable = $(event.target).closest('.draggable');
        if ($dragable.length){
            $el = $dragable;
            flag = true;    
         }else{
             flag = false;          
         }   
    }
});

请注意,event.which还可以按下按钮(mousedown和mouseupevents),报告左按钮1,中间2,右3。使用event.which而不是event.button

修改

使用parent方法意味着中间始终只存在两个祖先。依赖严格的结构会导致刚性和容易出错的代码。对于这种情况,IMO使用closest方法代替parent是一种更好的方法。