如何在触发ondblClickRow事件时阻止onSelectRow事件

时间:2013-10-02 07:59:11

标签: javascript jquery jqgrid

我遇到了jqGrid的问题,我不知道是否有一个简单的解决方案。

当我第一次点击一行时,应用slideUp标题包含有关注册表的信息,如果我再次点击应用slideDown此标题。这项工作在onSelectRow jqGrid事件中编码,并且正常运作。

当我连续双击时出现问题。在这种情况下,应用slideUp包含有关标题的寄存器的所有内容。我想要阻止的行为是onSelectRow,因为当ondblclickRow事件被触发时,onSelectRow事件之前被触发了两次。

这是我的代码:

ondblClickRow: function(id) {  
    if (model.gisgridmap.context.id=="griddiv" && $(".editbt").length>0) {                  
        if (model.selectedrow == id) {
            $el.trigger("onUnselectRow");   
            $(this).find(".ui-state-highlight, [aria-selected='true']").removeClass('ui-state-highlight');  
            model.selectedrow = 0;  
        }
        else{
            $el.trigger("onSelectRow", id);  
            $(this).find('[aria-selected=true]').addClass('ui-state-highlight');
            model.selectedrow = id;

            pui.editForm(model);
        } 
},
onSelectRow: function(id,status,e){
    if (model.selectedrow == id) {
        $el.trigger("onUnselectRow");   
        $(this).find(".ui-state-highlight, [aria-selected='true']").removeClass('ui-state-highlight');  
        model.selectedrow = 0;  
    }
    else{
        $el.trigger("onSelectRow", id);  
        $(this).find('[aria-selected=true]').addClass('ui-state-highlight');
        model.selectedrow = id;
    } 
}

提前致谢。

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

ondblClickRow: function(id, status, e) {
    e.preventDefault(); // see : http://api.jquery.com/event.preventDefault
    e.stopPropagation(); // see : http://api.jquery.com/event.stopPropagation
    ...
}

答案 1 :(得分:0)

最后,我在timeout上放了一个dblclick,有足够的时间来显示标题,之后表单slidesUp没有奇怪的行为。我无法按照我的意愿解决事件发生的问题,但解决方案很好。

           ondblClickRow: function(id, iRow, iCol, e) {
                pui._hideBar();
                if (model.gisgridmap.context.id=="griddiv" && $(".editbt").length>0) {                  
                    $(this).find('[aria-selected=true]').addClass('ui-state-highlight');
                    pui.showForm(model, id, false, model.gisgridmap.context.id);
                    setTimeout(function(){
                        model.selectedrow = id;
                        pui.editForm(model);
                    }, 400);                        
                }                    
            },
            onSelectRow: function(id,status,e){   
                if ($(this).jqGrid('getGridParam', 'multiselect')) {
                    $el.trigger("onSelectRow", id);
                    return;
                } 
                e.preventDefault();
                if (model.selectedrow == id) {
                    e.preventDefault();
                    $el.trigger("onUnselectRow");   
                    $(this).find(".ui-state-highlight, [aria-selected='true']").removeClass('ui-state-highlight');  
                    model.selectedrow = 0;  
                }
                else{
                    $el.trigger("onSelectRow", id);  
                    $(this).find('[aria-selected=true]').addClass('ui-state-highlight');
                    model.selectedrow = id;
                } 
            }

最好的问候。