无法访问对象上的jQuery事件

时间:2015-05-28 15:20:28

标签: javascript jquery event-handling

我正在尝试检查附加到其事件处理程序中的对象的事件。为什么下面的检查产生未定义?

HTML:

<button>Print out events in console</button>

JS:

$('button').on('click', function(ev) {
    console.dir($._data($(ev.target), 'events')); // undefined -- Why?
});

JSFiddle

5 个答案:

答案 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" )