【发布时间】:2015-03-31 11:50:53
【问题描述】:
我有一个由 Knockout.js foreach 数据绑定填充的图像网格。默认情况下,网格中的每个图像都有一个由背景颜色设置的黑色轮廓。当用户将鼠标悬停在每个图像上时,我希望该轮廓变为白色以表示它已被突出显示。
目前,我正在使用两个事件处理程序,一个用于mouseenter,一个用于mouseleave。
第一个将图像的 CSS 类更改为具有白色背景的类。后者将其改回黑色。但是,当鼠标进入图像时,两者都会被调用(通过调试确认),因此看不到任何变化。
HTML 如下:
(注意:每个图像都有一个fileName 属性表示图像文件的位置。有两个CSS 类称为black 和white,每个高亮状态一个。)
<div id="palette-container" data-bind="foreach: images" style="display: inline-block">
<div style="float: left">
<img class="black" data-bind="attr: { id: fileName, src: $parent.imagePath(fileName) },
event: { mouseenter: $parent.toWhite(fileName), mouseleave: $parent.toBlack(fileName) },
style: { width: $parent.size, height: $parent.size }">
</div>
</div>
如您所见,我现在并没有以非常优雅的方式执行此操作。我将每个元素的 id 绑定到其唯一的 fileName 属性。然后我将 fileName 传递给事件处理程序,以便可以通过 id 访问元素以更改 CSS 类。
(A) 为什么鼠标进入图片时mouseenter和mouseleave都被调用了?
(B) 实现所需突出显示功能的更简单方法是什么?
【问题讨论】:
-
啊,我想知道为什么所有的事件处理程序都在加载时被调用。知道这一点很有用。
标签: javascript css html knockout.js