我有一个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
}
Run Code Online (Sandbox Code Playgroud)
应该注意,该event对象来自jQuery事件处理程序.我不确定它是否与本机event对象不同或相同.
还应该注意的是,对于大多数浏览器而言,这会无声地失败,但是如果我没有为每个对象指定"未定义"状态,我会在IE中获得一个调试窗口......
如果有人有一个更优雅的解决方案,我真的很感激看到它.谢谢!
你不需要比较undefined.做一个真正的测试.此外,className不需要测试.该===比较将覆盖它.
if (
event.originalEvent &&
event.originalEvent.currentTarget &&
event.originalEvent.currentTarget.activeElement &&
event.originalEvent.currentTarget.activeElement.className === 'dontClick'
) {
Run Code Online (Sandbox Code Playgroud)
但是,无论如何,你所做的工作超出了需要,因为jQuery为你提供了可靠的服务currentTarget.
if (
event.currentTarget.activeElement &&
event.currentTarget.activeElement.className === 'dontClick'
) {
Run Code Online (Sandbox Code Playgroud)
或者如果你在处理程序中,只需使用this.
if (this.activeElement && this.activeElement.className === 'dontClick') {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |