Javascript 禁用div(ng)时,ng click仍然激发

Javascript 禁用div(ng)时,ng click仍然激发,javascript,angularjs,Javascript,Angularjs,问题是,ng click对so事件起作用,如果cancelTicket===false它仍然激发ng click。我怎样才能阻止它 <div class="btn-block save-changes padding-10" ng-class="{'gray':cancelTicket===false,'secondary-button':cancelTicket===true}" ng-click="CancelTicket(ticketPin)" ng-disabled="cancel

问题是,
ng click
对so事件起作用,如果
cancelTicket===false
它仍然激发
ng click
。我怎样才能阻止它

<div class="btn-block save-changes padding-10" ng-class="{'gray':cancelTicket===false,'secondary-button':cancelTicket===true}" ng-click="CancelTicket(ticketPin)" ng-disabled="cancelTicket===false" style="display: table;">
    <div class="button-container padding3" ng-class="{'pointer':cancelTicket===true}">
        <button-spinner promise="cancelPromise"></button-spinner>
        <div style="display: inline-block !important;"> @Translator.Translate("CANCEL") </div>
    </div>
</div>

@翻译(“取消”)

即使禁用了
div
,也会触发事件

您可以通过对表达式(如
isDisabled | | action()
进行惰性求值来避免这种情况,因此,如果
isDisabled
true
,则不会调用action

在您的情况下,它将是:

ng-click="cancelTicket === false || CancelTicket(ticketPin)"

当具有
ng click
的元素被
禁用时,可以禁用click事件

jQuery:

$('*[ng-click]').on('click',function(event) {
     var $el = $(event.target);
     if($el.attr('disabled')) {
        event.stopPropagation();
     }
});
angular.module('app').directive('button',function() {
     return {
          restrict: 'E',
          link: function(scope,el) {
              var $el = angular.element(el);
              $el.bind('click', function(event) {
                  if($el.attr('disabled')) {
                      event.stopImmediatePropagation();
                  }
              });
          }
     }
});
在所有DOM元素上执行此操作可能会产生不需要的结果。此外,您还需要在DOM上更新的任何新HTML上运行上述操作

相反,我们只需修改按钮即可按预期工作

角度:

$('*[ng-click]').on('click',function(event) {
     var $el = $(event.target);
     if($el.attr('disabled')) {
        event.stopPropagation();
     }
});
angular.module('app').directive('button',function() {
     return {
          restrict: 'E',
          link: function(scope,el) {
              var $el = angular.element(el);
              $el.bind('click', function(event) {
                  if($el.attr('disabled')) {
                      event.stopImmediatePropagation();
                  }
              });
          }
     }
});

我不会在
div
元素上执行上述操作,因为它太重了。相反,请修改您的方法,使
按钮
元素仅用于可单击的交互。然后,您可以将其样式设置为与其他
div
元素类似。

您应该将div标记更改为Button标记。 它适合我。

Delete
<a class="btn btn-danger btn-xs" ng-click="vm.handleRemove(device)" ng-disabled="status === 1">Delete</a>
将标签更改为按钮标签,然后确定

<button class="btn btn-danger btn-xs" ng-click="vm.handleRemove(device)" ng-disabled="status === 1">Delete</button>
删除

我的解决方案是使用带有属性的html指令,而不是ng click,以便

<html-tag-directive new-click="ctrl.functionToCall()" disabled="ctrl.disabled" >

是的,即使该事件为false,也会发生。如果该事件为false,您需要在代码中小心。在CancelTicket函数中使用“return”@BhojendraNepal where in code?进行此操作时,Angular会出现“尝试将值分配给非l值”错误。这是有效的。我一直在寻找这个答案很久了:)在调用同一个func但发送diff项作为输入的ng repeat中,这是否有效@同样的问题,完美的解决方案!我可以通过ng click=“cancelTicket&&cancelTicket(ticketPin)”:)