如何禁用所有ng-click和ng-submit事件

时间:2015-08-23 09:18:58

标签: javascript jquery angularjs

有什么办法,我如何全局(在服务中)禁用和启用所有ng-click和ng-submit事件?

例如,当用户离线时,我想禁用所有操作,直到他恢复连接为止..

我尝试使用onClick事件绑定所有元素,该事件将调用stopImmediatePropagation但它没有工作..

    $('*[ng-click]').click(function( event ) {
      event.stopImmediatePropagation();
    });

此问题与此问题略有不同: Disable ng-click on certain conditions of application for all types of element

我想在服务中全局禁用/启用APP中的所有事件,我无法修改APP中所有元素的所有ng- *调用。

2 个答案:

答案 0 :(得分:1)

尝试同时加入return false

$('*[ng-click]').click(function( event ) {
  event.stopImmediatePropagation();
  return false;
});

<强>段

下面的代码段演示了附加到单个<a>的多个事件处理程序也可以正常工作。

&#13;
&#13;
$(function () {
  $("a").click(function () {
    alert("Hello!");
    return false;
  });
  $("a").click(function () {
    alert("Bye!");
    return false;
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<a href="#">Click Me</a>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

所以最后我最终使用jquery暂时禁用页面上的所有事件。 我从这个插件http://ignitersworld.com/lab/eventPause.html中获得灵感,由于某些原因它没有用(没有任何错误)

所以我把主要部分放到了这个现在正在使用jquery v2.1.1 的的类中:

var EventManager = function() {
    var self = this;
    var nullFun=function(){};

    var getIndex = function(array,value){
        for(var i=0; i< array.length; i++){
            if(array[i]==value){
                return i;
            }
        }
        return -1;  
    };

    this.pauseEvent = function(elm,eventAry){
        var events = $._data(elm, "events");

        if (events) {
            $.each(events, function(type, definition) {
                if((getIndex(eventAry,type)!=-1)||(eventAry=='')){
                    $.each(definition, function(index, event) {
                        if (event.handler.toString() != nullFun.toString()){
                            if(!$._iwEventPause) $._iwEventPause = {};

                            $._iwEventPause["iw-event" + event.guid] = event.handler;
                            event.handler = nullFun;
                        }
                    })
                }
            })
        }
    };

    this.activeEvent = function(elm,eventAry){
        var events = $._data(elm, "events");
        if (events) {
            $.each(events, function(type, definition) {
                if((getIndex(eventAry,type)!=-1)||(eventAry=='')){
                    $.each(definition, function(index, event) {
                        if (event.handler.toString() == nullFun.toString()){
                            event.handler = $._iwEventPause["iw-event" + event.guid];
                        }
                    })
                }
            })
        }
    };

    this.disableAll = function(el) {
        el = el || $('*');
        el.each(function() {
            self.pauseEvent($(this)[0], '');
        });
        self.pauseEvent($(window)[0], '');
    };

    this.enableAll = function(el) {
        el = el || $('*');
        el.each(function() {
            self.activeEvent($(this)[0], '');
        });
        self.activeEvent($(window)[0], '');
    };

    return this;    
};

var eManager = new EventManager();

eManager.disableAll();
eManager.enableAll();

这将通过窗口对象和页面上的所有元素,将其事件处理程序移动到_iwEventPause对象并用虚函数替换处理程序。启用时,它将移回处理程序,以便它们通常被调用..

此解决方案无法处理禁用后添加的事件处理程序。