javascript - HTML 图像属性返回未定义

标签 javascript html reactjs cloudinary

我有一组 5 个图像,每个图像在过滤器列表中都有一个唯一的过滤器属性,主图像在单独的 div 中。 主图像未应用滤镜。

我想让用户单击侧边栏上的任何图像,然后将所选过滤器应用到主图像。 我尝试使用事件监听器来实现这一点,但我不太明白发生了什么。

这是我的代码: <img src='http://res.cloudinary.com/demo/image/upload/c_fill,e_art:audrey,h_80,w_120/sample' filter='audrey' className='filter' /> 以及当用户选择图像时调用的事件监听器。

onFilterSelect = event => {
      console.log(evenet.target) // returnsimg element
      console.log(event.target.src) // returns src of img element
      console.log(event.target.filter) // returns undefined
}

我想使用 filter='filter' prop 来调度一个将状态设置为新选择的过滤器的操作,但结果我一直得到未定义的结果。

最佳答案

HTMLImageElement.prototype 没有 filter property(您正在尝试访问的属性)。

您的图像具有过滤器-属性(这会使您的 HTML 无效,因为它不是 img< 上的有效属性 元素)。

如果您需要坚持使用该无效的属性名称,可以使用以下方式访问它

console.log(event.target.getAttribute('filter'))

更好的解决方案是将该属性更改为 data-filter 属性,您可以像这样访问它:

console.log(event.target.dataset.filter)

请注意,.dataset 对象中有一个特殊的命名约定:

data-filter="Audrey"

可以使用

访问
img.dataset.filter

但是

data-image-filter="Audrey"

将使用访问

img.dataset.imageFilter

注意 kebab-case 到 Camel-Case 的自动转换!

关于javascript - HTML 图像属性返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52212564/

相关文章:

html - 盒子大小,为什么高度 > 100%?

javascript - 使变量可在函数外部访问

javascript - 使用键的字符串更新 setState

html - 图标或图像居中,两边有线

javascript - 如何使用简单的 javascript 过滤 html 表?

javascript - 使用 React 将提交的表单值保存在 JSON 文件中

reactjs - React-native Tab 导航器未显示

javascript - 如何将两个方法合并为一个(.style + .getcompulatedstyle)

Javascript 对象列表返回 null 或 undefined 但不是

javascript - Moment js日期时间比较