我有textarea
我附加了模糊事件。如果用户点击页面上的特定span.dontClick
,我不希望运行模糊事件。但是,如果用户点击span.dontClick
以外的任何内容,我确实希望运行模糊事件。我找到了一种方法来做到这一点,但它看起来很糟糕,感觉非常hackey,而且我猜测那里有更好的解决方案。以下是我的想法:
if (event.type === 'focusout') {
if (
typeof event.originalEvent !== 'undefined' &&
typeof event.originalEvent.currentTarget !== 'undefined' &&
typeof event.originalEvent.currentTarget.activeElement !== 'undefined' &&
typeof event.originalEvent.currentTarget.activeElement.className !== 'undefined' &&
event.originalEvent.currentTarget.activeElement.className === 'dontClick'
) {
// abort the code for the blur event (in effect, do nothing)
}
else {
// run code for when a user blurs by not clicking on span
}
应该注意,event
对象来自jQuery事件处理程序。我不确定它是否与原始event
对象不同或相同。
还应该注意的是,对于大多数浏览器来说,这会无声地失败,但如果我没有为每个对象指定“未定义”状态,我会在IE中获得一个调试窗口......
如果有人有更优雅的解决方案,我会非常感激。谢谢!
答案 0 :(得分:7)
您不需要与undefined
进行比较。做一个真正的测试。此外,不需要className
的测试。 ===
比较将涵盖它。
if (
event.originalEvent &&
event.originalEvent.currentTarget &&
event.originalEvent.currentTarget.activeElement &&
event.originalEvent.currentTarget.activeElement.className === 'dontClick'
) {
但是你要做的工作比你需要的还要多,因为jQuery为你提供了可靠的currentTarget
。
if (
event.currentTarget.activeElement &&
event.currentTarget.activeElement.className === 'dontClick'
) {
或者如果您在处理程序中,只需使用this
。
if (this.activeElement && this.activeElement.className === 'dontClick') {