我正在尝试检查附加到其事件处理程序中的对象的事件。为什么下面的检查产生未定义?
HTML:
<button>Print out events in console</button>
JS:
$('button').on('click', function(ev) {
console.dir($._data($(ev.target), 'events')); // undefined -- Why?
});
答案 0 :(得分:3)
必须如下所示,因为第一个参数是DOM
元素:
$('button').on('click.myNamespace', function(ev) {
console.dir($._data(ev.target, 'events')); // undefined -- Why?
});
来自jQuery Blog的更多信息 $(元素).data(“events”):在版本1.6中,jQuery将其内部数据与用户数据分开,以防止名称冲突。但是,有些人正在使用内部未记录的“事件”数据结构,因此我们仍然可以通过.data()检索它。这在1.8中已被删除,但您仍然可以通过$ ._ data(element,&#34; events&#34;)获取事件数据以进行调试。请注意,这不是受支持的公共接口;实际的数据结构可能会因版本不同而发生变化。
答案 1 :(得分:1)
传递给_data
方法的元素应该是一个html元素,但是您传递的是jQuery对象。试试这个。
$('button').on('click.myNamespace', function(ev) {
console.dir($._data(ev.target, 'events')); // undefined -- Why?
});
答案 2 :(得分:0)
试试这个:
https://jsfiddle.net/ke36mr41/2/
$('button').on('click.myNamespace', function(ev) {
console.dir($._data(ev.target, 'events')); // undefined -- Why?
});
答案 3 :(得分:0)
你应该试试这个:
jQuery._data( elem, "events" );
因为elem
应该是HTML元素,所以我建议您之前执行此操作:
var elem = createElement("div");
elem.innerHtml = $('button').html();
答案 4 :(得分:0)
这正在工作
jQuery._data( $('button').get(0), "events" )