- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Javascript 的新手,我正在尽我最大的努力培养对事件在 jquery 中的工作方式的直觉。我正在开发一个交互式用户界面,允许用户编辑附加到组件单元格的对象。在我的代码中,我创建了一个包含 2 列和多行的网格。其中一列由具有以下 html 结构的单元格组成:
当用户将鼠标悬停在该单元格上时,会弹出 3 个按钮:新建、编辑、删除。
一切正常,但我遇到了以下问题:1.单击按钮时,菜单不出现。我也相信即使我在 button.click() 中使用 stopPropagation,也会有事件传播到祖先组件。因此,单击按钮会调用 component.click() ,从而生成一组新的按钮。
$(function() {
var $table = $('table');
var $form = $('<form>')
for (i = 42; i > 0; i--) {
$table.append('<tr><td class = "number">' + i +
'</td><td class = "component"></td></tr>');
}
/*
$('td.component').on('click', function(e) {
$(this).append('<button type = "submit" class = "new"><img class = "icon" src = "images/new.png" >new</img></button>' +
'<button class = "edit"><img class = "icon" src = "images/edit.png">edit</img></button>' +
'<button class = "delete"><img class = "icon" src = "images/delete.png">delete</img></button>');
});*/
/* support for hovering*/
$('td.component').mouseover(function() {
//$(this).css('background-color', '#ADD8E6');
$(this).append('<button class = "new"><img class = "icon" src = "images/new.png" >new</img></button>' +
'<button class = "edit"><img class = "icon" src = "images/edit.png">edit</img></button>' +
'<button class = "delete"><img class = "icon" src = "images/delete.png">delete</img></button>');
});
$('td.component').mouseout(function() {
$(this).css('background-color', '#FFFFFF');
$('button').remove();
});
$('button').mouseover(function() {
$(this).show();
});
$('button.new').click(function(e) {
e.stopPropagation();
componentMenu();
});
$('button.edit').click(function(e){
e.stopPropagation();
});
$('button.delete').click(function(e){
e.stopPropagation();
});
function componentMenu() {
var $menu = $('<select>');
$menu.append('<option>Bloodhound</option>');
$menu.append('<option>Compute</option>');
$menu.append('<option>Powershelf</option>');
$menu.append('<option>Storage</option>');
$menu.append('<option>Switch</option>');
}
});
此外,当用户将鼠标悬停在组件上,然后将光标移到按钮上时,按钮偶尔会淡入和淡出。虽然我不确定如何防止这种效果......有人认为我曾经为按钮编写鼠标悬停代码,如下所示:
$('按钮').mouseover(函数() { $(this).show();});
但这没有任何区别。
感谢您的帮助。
最佳答案
我不确定您的总体目标是什么,但让我梳理一下问题并向您展示可能的解决方案。
根据您的代码,我假设您希望在用户单击新建 按钮时随时显示菜单。那里有两个问题(正如@Phil 已经指出的那样):
由于您在悬停函数中创建了按钮,因此点击处理程序没有绑定(bind)任何内容。要解决此问题,您可以使用 jQuery.live
或将处理程序绑定(bind)到整个表。我更喜欢后一种解决方案,因为它很优雅:
$table.on('click', 'button.new', function(e) {
// button new clicked
});
$table.on('click', 'button.edit', function(e) {
// button edit clicked
});
$table.on('click', 'button.delete', function(e) {
// button delete clicked
});
componentMenu
函数实际上没有做任何事情componentMenu
的代码只是创建菜单元素的 jQuery 表示,但它没有附加到 DOM 的任何地方。最简单的解决方案是将它附加到您希望它出现的任何位置。
function componentMenu() {
var $menu = $('<select>');
$menu.append('<option>Bloodhound</option>');
$menu.append('<option>Compute</option>');
$menu.append('<option>Powershelf</option>');
$menu.append('<option>Storage</option>');
$menu.append('<option>Switch</option>');
$menu.appendTo('element-to-append-menu-to');
}
按钮的偶尔淡入淡出是由使用 mouseover
/mouseout
事件引起的。每当用户将鼠标移到元素上时都会触发事件 mouseover
,这会导致按钮在鼠标移动时重绘。
可能的解决方案是使用 mouseenter
事件,它只在用户鼠标开始悬停在元素上时触发一次,以及 mouseleave
事件,它也只在用户鼠标悬停在元素上时触发一次用户的鼠标停止悬停在元素上。
$('td.component').mouseenter(function() {
$(this).append('<button class = "new"><img class = "icon" src = "images/new.png" >new</img></button>' +
'<button class = "edit"><img class = "icon" src = "images/edit.png">edit</img></button>' +
'<button class = "delete"><img class = "icon" src = "images/delete.png">delete</img></button>');
});
$('td.component').mouseleave(function() {
$('button').remove();
});
我已经把你的code into jsbin并使用所有解决方案更新它并对其进行了一些改进。
希望对您有所帮助。
关于javascript - stopPropagation() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25129644/
以前从未遇到过这个问题,有人可以给我任何指示吗? 我正在创建一个网络应用程序,用于制作笔记,例如将笔记发布到白板上。目前,生成按钮将生成注释,但我想让用户可以单击 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
我是一名优秀的程序员,十分优秀!