【发布时间】:2016-11-06 07:43:46
【问题描述】:
我的目标很简单。图像上会有一个 show-overlay 指令。如果您输入鼠标,它将用父跨度包装并附加覆盖。在 mouseleave 上,它将删除父跨度和覆盖 div。 但是由于某种原因,如果我在 mouseleave 上使用 replaceWith 会导致下一次进入时意外触发 mouseenter 多次。
指令如下
app.directive('showOverlay', function($compile) {
return {
restrict: 'A',
link: function($scope, $element, attrs) {
$element.on('mouseenter', function (e) {
console.warn('mouseenter');
$el = $element.wrap("<span class='img'></div>")
$el = $el.parent().append("<div ng-mouseleave='cancelEditMode($event)' class='overlay'></div>");
$element.parent().addClass("hover");
var inputElem = $element.parent();
$compile(inputElem)($scope);
});
$scope.cancelEditMode = function(e) {
$element.parent().replaceWith($element);
};
}
};
});
从上面的代码,看起来 replacewith 导致 $element 有多个 mouseenter 事件。 jsfiddle 在这里:http://jsfiddle.net/RmDuw/979/
【问题讨论】: