Svi*_*lev 10 javascript reactjs
我试图找出如何使false
onCopy事件上的剪贴板事件返回.我用它来测试onCopy
处理程序和e.preventDefault()
方法.但文本被无限制地复制到缓冲区!我想念的是什么?
先感谢您.
import React from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
import ReactDOMServer from 'react-dom/server';
import './index.css';
class Copy extends React.Component {
constructor(props) {
super(props);
this.state = {
time: '',
timer: false,
counter: 0
};
this.handlerCopy = this.handlerCopy.bind(this);
}
handlerCopy(e) {
e.preventDefault(); // must prevent the current event
this.setState(prevState => ({
counter: prevState.counter + 1
}));
alert('Don\'t copy it!');
}
render() {
return (
<React.Fragment>
<p onCopy={this.handlerCopy}>Copy me!</p>
<p>Copy count: {this.state.counter}</p>
</React.Fragment>
);
}
}
ReactDOM.render(
<Copy />,
document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
这是一个非常好的问题!
发生这种情况,因为React的实际事件监听器也位于文档的根目录,这意味着click事件已经冒泡到根目录.您可以使用它e.nativeEvent.stopImmediatePropagation()
来阻止其他事件侦听器.
试试吧:
import React from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
import ReactDOMServer from 'react-dom/server';
import './index.css';
class Copy extends React.Component {
constructor(props) {
super(props);
this.state = {
time: '',
timer: false,
counter: 0
};
this.handlerCopy = this.handlerCopy.bind(this);
}
handlerCopy(e) {
console.log(e.target.innerHTML);
e.preventDefault();
e.nativeEvent.stopImmediatePropagation();
this.setState(prevState => ({
counter: prevState.counter + 1
}));
alert('Don\'t copy it!');
}
render() {
return (
<React.Fragment>
<p onCopy={this.handlerCopy}>Copy me!</p>
<p>Copy count: {this.state.counter}</p>
</React.Fragment>
);
}
}
ReactDOM.render(
<Copy />,
document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1382 次 |
最近记录: |