如果单击某个按钮,我希望我的onBlur处理程序能做一些不同的事情
I want my onBlur handler to do something different if a certain button is clicked
我有一个组件a,它接收焦点并传递一个onBlur处理程序。我旁边还有一个按钮。如果单击按钮时a失去焦点,而不是在DOM上的其他地方失去焦点,我希望a的onBlur做一些不同的事情我该怎么做?
您可以检查触发onBlur的点击DOM元素是否为按钮,如下所示:
const ComponentA = React.createClass({
propTypes: {
onBlur: React.PropTypes.func.isRequired,
},
componentDidMount: function() {
document.addEventListener('click', this.onAnyClick);
},
componentWillUnmount: function() {
document.removeEventListener('click', this.onAnyClick);
},
onAnyClick(event) {
const container = this.refs.container; // DOM element
let isClickedOutside = true; // initialization
const eventTarget = event.target; // DOM element
let elem = eventTarget;
while (elem !== null) {
if (elem === container) {
isClickedOutside = false;
break;
}
elem = elem.offsetParent;
}
if (isClickedOutside) {
this.props.onBlur(eventTarget);
}
},
render: function() {
return (
<div ref="container">
{/* component elements */}
</div>
);
},
});
const Button = React.createClass({
getElement: function() { // public method
return this.refs.element; // DOM element
},
render: function() {
return (
<input ref="element" type="button" value="Click me" />
);
},
});
const ParentComponent = React.createClass({
onComponentABlur(eventTarget) {
if (eventTarget === this.refs.button.getElement()) {
// do something if button was clicked
} else {
// do something else
}
},
render: function() {
return (
<div>
<ComponentA onBlur={this.onComponentABlur} />
<Button ref="button" />
</div>
);
},
});
相关文章:
- 在同一个javascript事件处理程序中调用不同的函数
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- 如何在不同的java程序中捕获JS可变值
- Dojo:在单页应用程序中交换两个不同的视图
- web工作程序中不同的服务器请求行为
- 在不同的选项卡中对Web应用程序的更改做出反应
- 如何基于正则表达式在 O365 邮件应用程序中加载不同的页面
- 如何为略有不同的不同版本的web应用程序构建代码
- 在两台不同的服务器上运行同一node.js应用程序的两个实例
- 如何为PhoneGap应用程序提供两种不同的UX/UI
- 如何使用不同的API's在同一个Angular JS应用程序中具有不同的身份验证标头
- AngularJS应用程序中的不同templateUrl
- 如果单击某个按钮,我希望我的onBlur处理程序能做一些不同的事情
- 在不同端口上运行时,rest api应用程序服务器(express)和Angulars js应用程序之间的Cors问题
- 通过使用不同的选择器选择元素,为元素提供多个事件处理程序
- Webpack - 将应用程序部署到不同的环境
- 如何本地化节点.js应用程序,每个区域设置具有不同的单词位置,混合静态和动态本地化文本
- 火狐应用程序可以使用不同的用户代理吗?
- 需要从PhoneGap应用程序在不同的浏览器中打开链接
- 异常:在 [AppWidgetsComponent@8:28 中的应用程序]中找不到不同的支持对象“storeApps”