首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理点击子元素

如何处理点击子元素
EN

Stack Overflow用户
提问于 2019-02-10 05:52:22
回答 2查看 28.7K关注 0票数 12

当我在这里的一个子元素上做一个单击事件时,为什么这会产生错误?当我附加onClick={this.handleChangeCity} in the"cities"`类时,它也产生了一个错误

我很想听听你是怎么解决这个问题的。

Eslint错误:带有单击处理程序的eslint可见非交互元素必须至少有一个键盘侦听器。(jsx-a11y/click-events-have key-events)将静态HTML元素与事件处理程序关联起来需要一个角色。(JSX -a11y/无静态元素交互)(JSX属性) onClick: any

代码语言:javascript
复制
import React from "react";
import ReactDOM from "react-dom";
import jsonData from "./navigation.json";

class App extends React.Component {
    constructor(props) {
super(props);

this.state = {
  loading: true,
  cities : jsonData.cities,
  currentCity: jsonData.cities[0].label,
};

this.handleChangeCity = this.handleChangeCity.bind(this);
  }

  createCities(){
    //let cityList = [];
    let children = [];
    let cityClass = 'oneCity';
    let activeCityClass = `${cityClass} active`;
    this.state.cities.forEach((city, index) =>{ 
      let divClass = index ? cityClass : activeCityClass;
      children.push(<div 
        onClick={this.handleChangeCity} ===> error when this is added
        className={divClass} 
        data-city={city.label}
        key={index}>{city.label}</div>)
    });

    return children;

  }

我不知道为什么会发生这样的事情。

代码语言:javascript
复制
  handleChangeCity = (event) => {
    event.preventDefault();
    console.log(event.currentTarget);
    this.setState({
      currentCity: event.currentTarget.key
    });
  }



  render() {
    return (

      <section className="container">
        <div className="navigation">
          <div className = "cities clearfix">
               {this.createCities()}

          </div>

          <div className="underline"></div>
        </div>
      </section>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-10 08:26:12

好的,看起来你得到了2个皮棉错误。首先是Visible, non-interactive elements with click handlers must have at least one keyboard listener.。这看起来是关于可访问性的,所以人们可以使用键盘和鼠标进行交互。因此,您还必须添加一个键处理程序,请查看this similar post

第二个问题是Static HTML elements with event handlers require a role.。这是一个内联选项,可防止将事件处理程序绑定到泛型对象,如<div/>。请查看this post以找到答案。

或者,您可以更改或禁用您的linting,以便这些不再是问题。

票数 35
EN

Stack Overflow用户

发布于 2020-08-18 20:39:51

这些是ESLint文档中提到的ESLint问题,如下所示:

Enforce onClick至少伴随以下一项: onKeyUp、onKeyDown、onKeyPress。

要解决这个问题,您可以使用上面提到的任何一个属性,并将您的代码更改为:

代码语言:javascript
复制
<div 
   onClick={this.handleChangeCity}
   onKeyDown={this.handleChangeCity}
   className={divClass} 
   data-city={city.label}
   key={index}>{city.label}
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54611139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档