- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 <input type="checkbox">
<summary>
内的标签在 <details>
里面, 不幸的是切换了 <details>
在选中或未选中时打开或关闭,与 this question concerning space toggling details 不同,但不幸的是,在我的 Firefox 版本中无法使用相同的方法修复。
请看下面的片段:
$('input').change(function(e) {
e.stopPropagation();
e.preventDefault();
return false;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<details>
<summary>
<input type="checkbox">
</summary>
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse finibus bibendum lorem, vitae efficitur felis mattis vitae. Sed mattis tristique rutrum. Morbi a placerat purus, et pulvinar risus. Vivamus accumsan sapien et nisi vulputate blandit. Aenean nec consectetur nulla. Nunc efficitur tincidunt placerat. Vivamus blandit est lectus, ut fermentum velit vulputate ut. Morbi elementum sem massa, eleifend laoreet dui tristique quis. Nulla mi dolor, consectetur blandit fermentum quis, tempor id nisi. Phasellus vel lobortis enim, id blandit turpis. Nullam dapibus feugiat risus eu pharetra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam enim justo, pharetra sit amet urna sed, ultricies tempor nibh.
</div>
</details>
如何防止 <details>
通过选中或取消选中复选框来打开/关闭? (除了将 <input>
标签移到 <summary>
之外的明显答案。我很好奇为什么会发生这种情况)
编辑
正如@Terry 提到的,然后由我确认,这个问题不会影响 Safari 或 Chrome,甚至 Windows 上的 Firefox 似乎也有不同的行为(它只是完全忽略了对复选框的点击)。确认影响 OS X Mojave 10.14.4 上的 Firefox 66.0.2-3。
此外,如果您捕获 <summary>
上的点击事件和 return false;
复选框仍会切换 <details>
, 即使单击 <summary>
中的其他位置没有。
编辑2
这是一个 Firefox 错误,已在版本 67 中修复。
最佳答案
欢迎来到不兼容的浏览器世界! :D
首先,您应该考虑使用 click
事件而不是 change
事件,因为如果用户点击一个复选框,首先是click
事件被触发然后change
事件,这意味着 click
事件负责切换行为,而不是 change
事件。
因此,在 Chrome 和 Firefox 上,click
特殊元素的事件,例如 input
, button
, textarea
位于 summary
元素冒泡到父元素 details
元素,这是一种正常行为,但有趣的是 click
事件显然只在 Chrome 中被忽略而没有进一步处理,因此 details
元素未切换。您可以尝试使用另一个元素,即 button
, 在 Chrome 上,你会观察到没有区别。另一方面,无论元素的类型如何,Firefox 都会切换它。
所以,为了解决这个问题,(在 CSS 的帮助下)你可以用 ghost 试试 checkbox
可以说,元素是绝对定位的,因此不是正常文档流的一部分。它是不可见的,最重要的是通过停留在可见复选框的顶部并处理 click
来操作可见复选框的状态。首先是事件,像这样:
附言适用于 Firefox 和 Chrome - 已测试。
$('input.ghost-checkbox').click(function(e) {
$(this).next().prop('checked', !$(this).next().prop('checked'));
return false;
});
.ghost-checkbox {
opacity: 0;
position: absolute;
z-index: 2;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<details>
<summary>
<span style="overflow: hidden">
<input type="checkbox" class="ghost-checkbox">
<input type="checkbox">
</span>
</summary>
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse finibus bibendum lorem, vitae efficitur felis mattis vitae. Sed mattis tristique rutrum. Morbi a placerat purus, et pulvinar risus. Vivamus accumsan sapien et nisi vulputate blandit. Aenean nec consectetur nulla. Nunc efficitur tincidunt placerat. Vivamus blandit est lectus, ut fermentum velit vulputate ut. Morbi elementum sem massa, eleifend laoreet dui tristique quis. Nulla mi dolor, consectetur blandit fermentum quis, tempor id nisi. Phasellus vel lobortis enim, id blandit turpis. Nullam dapibus feugiat risus eu pharetra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam enim justo, pharetra sit amet urna sed, ultricies tempor nibh.
</div>
</details>
关于javascript - 防止输入复选框切换 <details>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55596569/
我有一个应用程序,其中许多对象都扩展了一个抽象类,该抽象类定义了诸如 create() edit() retrieve() 和 delete()。由于每个子类对这些函数使用相同的逻辑,抽象类定义了默认
我正在使用$anchorScroll滚动到页面顶部,其中 html 元素具有 ID #brand。 AngularJS 代码: $location.hash(
我想停用我的应用程序中的右键单击,该右键单击提供了在桌面上安装应用程序的选项。我该如何做这样的事情? 最佳答案 右键单击 Visual Studio 中的项目并选择属性。那里有一个复选框“启用浏览器运
我使用 jquery 定位 div,在我的 CSS 中我有一个 div.right-sm:hover{background-color: blue} 我想使用 jquery 停止悬停: $(this
所以,我正在尝试复制 html5“占位符”属性功能。 我目前坚持的一件事是,在获得元素焦点时,插入符号立即出现在输入的开头。 就目前情况而言,插入符号出现在用户单击的位置,然后当我使用 jQuery
当表单填写并发送时,如果您刷新页面,它表示表单将再次发送。 (再次提交表格)。 防止这种情况发生的好方法是什么?或者终止这个 session ? 这方面有什么指导吗? 谢谢 最佳答案 处理完POST信
我想阻止 @ 被输入到 input 中。但它不起作用,知道为什么吗? $(function() { $(document).on('keyup', '[placeholder="x"]', fun
我正在使用 PHP 创建一个应用程序并涉及 MySQL。如果在请求过程中发生错误,我将如何“将查询分组在一起”,检查它是否会成功,然后对真实表进行实际影响。如果对表的实际更新失败,则恢复到更新之前的状
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Best Java obfuscator ? 对于我的示例,我知道 eclipse 提供了一个反编译插件。而
这是一个演示我的问题的 fiddle :JSFiddle 我正在制作自定义下拉菜单(实际上我使用的是 icomoon 图标而不是 V)...它看起来不错,但是父元素的 ::after 是阻止选择:(
每当我编写需要大量条件的代码时,我都会这样做: if foo: if bar: if foobar: if barfoo: if foobarfoo:
我不确定术语是否正确,您可以使用哪些代码实践来使某人难以修改二进制文件/程序集以绕过检查: 例如在源代码中。 bool verificationResult = verify(); if (verif
我正在寻找一种简单的方法来检查多个零件表,以确定给定零件号在添加到给定表之前是否已经存在。 我目前想到的最好的想法是一个辅助表,它简单地将所有表中的每个 PN 列在一个列中,并带有一个唯一的键;但是我
这个问题在这里已经有了答案: jquery stop child triggering parent event (7 个答案) 关闭 8 年前。 我不确定这是否真的冒泡,我会解释。 我有这个:
我有一个 Spring MVC web 应用程序(不确定该信息是否重要,但它可能是)使用 ModelAndView 将字符串值传递给 JSP 文件。 字符串值的形式是: d@.
我在这里尝试使用表单 key 方法进行 csrf 保护 http://net.tutsplus.com/tutorials/php/secure-your-forms-with-form-keys/
htmlentities 是防止 PHP 中的 XSS 的最佳解决方案吗?我还想允许像 b、i、a 和 img 这样的简单标签。实现这一点的最佳解决方案是什么?我确实考虑过 bbcode,但发现如果没
我有一个非常基本的 JAX-RS 服务(下面的 BookService 类),它允许创建 Book 类型的实体(也在下面)。 POST负载 { "acquisitionDate": 14188
我正在使用 Polymer 1.5,我确实需要“this”变量不要映射到外部。我知道 typescript 会为某些人做这件事 valid reasons . declare var Polymer:
这个问题在这里已经有了答案: Class-level read-only properties in Python (3 个答案) 关闭 6 年前。 有没有一种方法可以通过重写实例变量的 __set
我是一名优秀的程序员,十分优秀!