javascript - 嵌套元素中的多个事件

标签 javascript prototypejs

我正在尝试创建一个包含复选框和其他输入元素的网络表单,我想为用户提供在单击包围的 div 元素时选中和取消选中复选框的能力。

这是 HTML 的示例:

<div class="line">
  <input type="checkbox" />
  <p>No, I don't want more newsletters</p>
</div>

很简单。现在,当用户单击复选框时,它会被选中/取消选中,并且事件会冒泡到 div.line 元素,这可能会改变其背景颜色或其他内容。现在,正如我所说,我还希望用户能够通过单击 div 来操作复选框值。听起来很简单;我们只是将观察者添加到 div.line 元素,捕获事件并切换复选框值。那么问题来了: 当您单击复选框时,它的值被切换。但是,由于它驻留在 div 中,您还可以单击 div,触发它的观察器,这又会再次切换复选框值。所以你最终会回到你开始的地方。发生两次切换。

我一直为此绞尽脑汁,尝试了所有不同的方法。自定义事件、自定义元素标志……在单个函数运行期间根本无法判断是复选框被单击还是周围的 div 元素被单击。但一定有办法,我就是看不到。

有人知道吗?顺便说一下,我正在使用 Prototype。

最佳答案

使用 <label>具有适当定向的元素 for attribute :

<label for="cb"><input type="checkbox" id="cb" /> Click anywhere here</label> 

Demo here .

好处是标记在语义上变得令人满意。请注意 for如果您像这样包装目标控件,则该属性在技术上是可选的,但 IE<7 不支持该属性(但在发布的示例中可以正常工作)。

关于javascript - 嵌套元素中的多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1814300/

相关文章:

javascript - 仅在输入完成时关闭/隐藏 div,没有提交按钮

javascript - 如何在 Rails 3.1 中将 jquery 替换为原型(prototype)

javascript - 将鼠标悬停在不同位置的另一个 div 上时更改一个 div 的内容

javascript - 基本的 Angular JS 应用程序不工作

css - 使用原型(prototype)动态更改页面加载的背景图案

javascript - 选择所有使用原型(prototype)检查的单选按钮

javascript - 使用 Prototype 从另一个域加载 JavaScript 文件

javascript - 淡出所有 "LI"元素

javascript - 使用 addEventListener 或 onclick 调用时函数不起作用,不显示任何错误消息

javascript - 是否可以通过javascript使一次点击触发两个或更多事件?