- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 jQuery 中,您可以执行以下操作:
$('#j_unoffered').on('click', '.icon_del', function () {...
这会在元素 j_unoffered
上放置一个处理程序,如果单击具有类 icon_del
的任何后代元素,该处理程序就会触发。此外,它适用于任何随后创建的 icon_del
元素。
我可以在点击元素本身的 Closure 中正常工作。
goog.events.listen(
goog.dom.getElement('j_unoffered'),
goog.events.EventType.CLICK,
function(e) {...
如何在 Closure 中指定父事件目标,以与 jQuery 示例相同的方式为其子/后代工作?
我假设我需要以某种方式使用 setParentEventTarget
,但我不确定如何为 DOM 事件实现它。我找到的大部分文档都与自定义调度事件有关。
-- 更新--
我想知道这个相当简单的解决方案是否有任何问题:
goog.events.listen(
goog.dom.getElement('j_unoffered'),
goog.events.EventType.CLICK,
function(e) {
if (e.target.className.indexOf('icon_del') !== -1) {...
它仍然将 this
绑定(bind)到父级,但 e.target
允许变通。 listen
(opt_handler) 中的第五个参数允许您将 this
绑定(bind)到其他东西,所以我想这也是一个途径。
最佳答案
我也不知道这种可能性,所以我建议其他一段代码:
var addHandler = function(containerSelector, eventType, nestSelector, handler) {
var parent = goog.isString(containerSelector) ?
document.querySelector(containerSelector) :
containerSelector;
return goog.events.listen(
parent,
eventType,
function(e) {
var children = parent.querySelectorAll(nestSelector);
var needChild = goog.array.find(children, function(child) {
return goog.dom.contains(child, e.target);
});
if (needChild)
handler.call(needChild, e);
});
});
用法:
addHandler('#elem', goog.events.EventType.CLICK, '.sub-class', function(e) {
console.log(e.target);
});
更新:
如果您将使用此 e.target.className.indexOf('icon_del')
,则可能会错过正确的事件。考虑一个 id = container
的容器 div,它有几个类为 innerContainer
的 div,每个 div 都包含几个类为 finalDiv
的 div >。并考虑您将使用上面的代码添加事件处理程序,这将检查 e.target 中的 innerContainer
类。问题是当用户单击 finalDiv
时,您的处理程序将被调用,但事件目标将是 finalDiv
,它不是 innerContainer
,而是包含在其中。你的代码会错过它,但它不应该。我的代码检查 e.target 是否有嵌套类或包含在其中,因此您不会错过此类事件。
opt_handler
也不能真正帮助你,因为可能有很多嵌套元素你想处理(你会把其中的哪些传递到这里?也许全部,但不是很有帮助,你可以得到它们随时都在事件处理程序中),而且它们可以在之后动态添加,因此当您添加处理程序时您无法知道它们。
总之,我认为在事件处理程序中做这样的工作是合理且最有效的。
关于javascript - 闭包事件委托(delegate) - DOM 父级上的事件监听器,涵盖给定类的子级/后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577983/
我的代码中有几个场景符合这种模式,我确信这是一个常见的编程问题。我想遍历一个数组或一个对象,并在每次迭代时运行一个(可能)异步函数。在当前迭代完成之前,我不希望下一次迭代开始。 如果处理是同步的,下面
我无法理解如何对函数进行单元测试,以便 Istanbul 尔认为它们已被覆盖。 举一个非常简单的例子,我创建了这个数学模块: var add = function( one, two ){ r
有谁知道是否有涵盖 Joshua Bloch 在他的 Effective Java 书中提出的大部分建议的检查样式规则汇编?我知道我可以在 checkstyle 插件中添加自定义规则,但我想知道是否有
我遇到了 const 和非 const 版本的相同代码重复问题。我可以用一些代码来说明问题。这里有两个示例访问者,一个修改访问对象,一个不修改。 struct VisitorRead { te
我想要一本能够真正让我全面了解使用 C#、TDD、ASP.NET MVC、DDD 和设计模式(例如存储库模式)的现代 ASP.NET 开发的书籍。我非常擅长 C# 和 ASP.NET MVC,但想填补
我最近开始使用 NexusLight ,一个功能测试自动化框架。是否有更多框架可以完成类似的工作? 相关问题:End-to-End application testing from a users s
我一直在寻找 Python 的实现,但运气不佳,该实现将中缀转换为前缀,范围内有足够数量的算术和逻辑运算符,并关心其在良好 Python 实现上的属性。 更具体地说,我对出现在 C 程序的条件子句中的
我正在使用 Google 新设计支持库中的新 CoordinatorLayout。 我有以下布局:
我使用 CSS 创建了下拉菜单,并且在导航栏正下方的框中放置了一个 YouTube 视频。使用 IE 8 时,下拉菜单落后于 YouTube 视频,尽管带有导航栏的 div 的 z-index 高于带
我想使用 TypeScript 来声明带有参数的函数,这些参数可以是常规 JavaScript 数组,也可以是类型化数组,但我找不到合适的方法来实现它。我希望有一个像这样的界面: interface
我是一名优秀的程序员,十分优秀!