我使用以下指令来检测点击事件是否发生在一个div之外:
在这个 div 中:
当您点击div外部时,closeMyPopup()函数会被触发,这个功能很好。问题是div中有一些按钮可以触发其他函数。由于某种原因,当调用其他函数(例如当点击按钮时)时,会触发点击外部的事件从而调用closeMyPopup()函数。按钮位于div内部,因此不应该调用点击外部的事件。是否有另一个可以使用的指令,具有正确的行为且在触发其他函数时不会触发点击外部的事件?或者我该如何解决这个问题?
我还使用了另一个具有相同问题的指令:
app.directive('clickOut', function ($window, $parse) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var clickOutHandler = $parse(attrs.clickOut);
angular.element($window).on('click', function (event) {
if (element[0].contains(event.target)) return;
clickOutHandler(scope, {$event: event});
scope.$apply();
});
}
};
});
在这个 div 中:
<div class="panel-body" click-out="closeMyPopup()">
<div class="row clearfix">
<div class="col-md-12">
<div class="form-inline pull-right">
<button type="button" class="form-control btn" ng-click="onCancelAnnouncement()">Cancel</button>
<button type="submit" class="form-control btn" ng-click="onSaveAnnouncement()">Save</button>
</div>
</div>
</div>
</div>
当您点击div外部时,closeMyPopup()函数会被触发,这个功能很好。问题是div中有一些按钮可以触发其他函数。由于某种原因,当调用其他函数(例如当点击按钮时)时,会触发点击外部的事件从而调用closeMyPopup()函数。按钮位于div内部,因此不应该调用点击外部的事件。是否有另一个可以使用的指令,具有正确的行为且在触发其他函数时不会触发点击外部的事件?或者我该如何解决这个问题?
我还使用了另一个具有相同问题的指令:
app.directive("outsideClick", ['$document', '$parse', function ($document, $parse) {
return {
link: function ($scope, $element, $attributes) {
var scopeExpression = $attributes.outsideClick,
onDocumentClick = function (event) {
var isChild = $element.find(event.target).length > 0;
if (!isChild) {
$scope.$apply(scopeExpression);
}
};
$document.on("click", onDocumentClick);
$element.on('$destroy', function () {
$document.off("click", onDocumentClick);
});
}
}
}]);