- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,所以我一直在努力解决这个问题。在达到这一点之前我得到过帮助,我正在尝试解决一个问题,当您在展开的 optgroup 下单击并拖动一个选择时,它会折叠 optgroup。我一直在尝试在 Controller 中运行 jquery 类事件以防止这种情况发生,但不幸的是什么都没有发生。我什至尝试过单击一个检查父/子项的选项来调用一个函数,但我想我遗漏了一些东西。现在这里是当前工作的 plnkr:Plnkr
我想知道这是否是一个已知问题,如果是,是否有更好的解决方法?这是我第一次使用 stopPropagation,所以我很可能没有正确使用它。当您单独选择一个选项或按住 ctrl/shift 并选择时,stopPropagation 起作用。如果您单击并拖动通过标签或通过选项的底部,它们不会折叠,但如果您单击并拖动并停在一个选项上,它们就会折叠。
以下是我要解释的内容的 GIF:
HTML:
<head>
<script data-require="angular.js@1.4.1" data-semver="1.4.1" src="https://code.angularjs.org/1.4.1/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="MainCtrl">
<select multiple class="box">
<optgroup ng-click="value.expanded = !value.expanded" ng-repeat="(key,value) in data" label="{{value.label}}">
<option ng-click="$event.stopPropagation()" ng-if="value.expanded" ng-repeat="id in value.ids">{{id}}</option>
</optgroup>
</select>
</body>
</html>
剩下的在plnkr中
最佳答案
这是一个愚蠢的行为,因为 optgroup
是 DOM 中的父元素及其子元素的高度。因此,一旦您在拖动和停止拖动时移动了光标,ng-click
事件也会在 optgroup
元素上触发(因为光标在它上面)。我通过添加软件开关使其工作,如您在此 runnable plnkr 中所见.
<select multiple class="box">
<optgroup ng-click="clickOptGroup(key);" ng-repeat="(key,value) in data" label="{{value.label}}">
<option ng-mousedown="mouseDown()" ng-mouseup="mouseUp()" ng-click="$event.stopPropagation();" ng-if="value.expanded" ng-repeat="id in value.ids">{{id}}</option>
</optgroup>
</select>
var app = angular.module('test',[]);
app.controller('MainCtrl',function ($scope, $timeout) {
var mouseDown = false;
$scope.data = [{
label: "My Label", ids: [ "one id", "another id" ],
expanded: true
},{
label: "My Other Label", ids: [ "one id", "another id" ],
expanded: false
}];
$scope.clickOptGroup = function (key) {
console.log('in');
if (!mouseDown) {
$scope.data[key].expanded = ! $scope.data[key].expanded;
}
}
$scope.mouseDown = function ($event) {
console.log('mouseDown');
mouseDown = true;
}
$scope.mouseUp = function ($event) {
$timeout(function () {
mouseDown = false;
}, 50);
}
});
关于javascript - ng-click 上的 $event.stopPropagation 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678408/
以前从未遇到过这个问题,有人可以给我任何指示吗? 我正在创建一个网络应用程序,用于制作笔记,例如将笔记发布到白板上。目前,生成按钮将生成注释,但我想让用户可以单击 Canvas (白板)上的任意位置,
我有一个从左侧滑入的侧 Pane ,使用 get() 动态添加内容。我希望 Pane 外的所有单击都可以通过触发函数来使其关闭。根据我读到的其他问题,我想出了以下代码。 $('html').click
我将两个事件处理程序绑定(bind)到“keydown”上的输入字段。如果已按下 Enter 键,则第一个事件处理程序需要停止事件的传播,以便它不会影响第二个事件处理程序。我这样做是这样的: if (
我在 div 内有一个带有“element”类的 anchor 。 Log Out 我使用以下代码来处理注销。 jQuery(".element").click
我有一个 div,里面有一个链接: Lol 单击 应该去某个地方,但是点击 child 应该去 www.lol.com。我从previous questions看到和 jQuery web
我想在单击图像时停止冒泡。我无法在 href 上设置 javascript void,因为这是必需的。我已经使用了 stopPropagation 但它不起作用。 function showurl(e
我有一个包含很多 e.stopPropagation 的页面,所以我决定要做的是创建一个函数。这是代码 function stopProp(name) { if($(e.target).hasCla
是否可以在不阻止默认事件行为的情况下停止事件传播? 这应该让输入在滚动时递增/递减,但阻止它冒泡到任何其他元素并滚动外部 div。 (我认为以下内容仅适用于 Chrome) $("input[type
在上图中,父dom节点有其事件,子节点也有。 我可以在 Child 中使用 stopPropagation 来防止冒泡。 但在这种情况下,如果有太多 child ,就应该写太多 stopPropaga
我不明白 stopPropagation 是做什么的。为什么我需要在这段代码中使用 stopPropagation() ?。如果我不使用它,回车键第一次就不起作用。这是代码:http://codepe
我在 foreach 循环中创建了一些 Tiles: @foreach (var a in Model.AA) { } 每个图
每当在一列数据下单击 show/less 时,我都会尝试避免每个特定行上发生 onClick 事件。我有一个基本上具有选择和多选功能的网格。其中一列还可以显示更多/显示更少。每当我单击显示更多/更少时
我正在使用以下color picker它工作正常,但是当我单击颜色选择器图标时,我不希望它冒泡到主体。所以我尝试了以下方法,现在颜色选择器无法工作。 检查http://jsfiddle.net/CWG
如何在不触发其容器上的 click 事件的情况下监听复选框上的 change 事件? Hello world 我想触发复选框的 change 事件的操作,但我不希望它冒泡到标签上的 click 事件
我有一些 html 看起来像这样(简化) 我的 CSS 看起来像这样: .as
我想知道是否有人可以帮助最终解决我前阵子在 SO 上提出的问题。 我无法通过单击按钮外部或页面上的其他任何位置来取消切换这些下拉菜单。 请看这个 jsFiddle . 我见过人们使用 stopProp
我是 Javascript 的新手,我正在尽我最大的努力培养对事件在 jquery 中的工作方式的直觉。我正在开发一个交互式用户界面,允许用户编辑附加到组件单元格的对象。在我的代码中,我创建了一个包含
我使用 jquery 来隐藏和显示侧边栏,如果我在外部单击或调整侧边栏隐藏的大小,但我遇到了一个问题,所以我的所有下拉列表都停止了,因为我使用了 stopPropagation 我的 HTML 是 $
我有一些 jQuery 代码来关闭我的菜单: $('body').click(function(){ $('#menu').hide(); }); $("#menu").click(functio
我有以下代码,其中我有一个标签,我可以在其中阻止默认操作,这样我就可以在单击而不是输入时专注于可编辑范围。但是,如果用户单击跨度,我希望它忽略绑定(bind)到父级的单击事件,因此我使用 stopPr
我是一名优秀的程序员,十分优秀!