我遇到了自定义 jQuery 事件并通过委托来监听它的问题,具体取决于事件的触发方式。在两个 p 标签上都正确触发了字符串事件。然而,jQuery.Event 对象只会在直接绑定的 p 标签上被触发。我准备了一个小提琴来演示:http: //jsfiddle.net/s35bg/
这是HTML:
<p class="delegation">Via delegation:</p>
<p class="direct">Directly:</p>
和 JavaScript:
$(function () {
// bind using delegation
$(document).on('create', 'p.delegation', function (e) {
if (e.test) {
$(this).append(' $.Event');
} else {
$(this).append(' string');
}
});
// bind directly
$('p.direct').on('create', function (e) {
if (e.test) {
$(this).append(' $.Event');
} else {
$(this).append(' string');
}
});
// trigger the event with a string
$('*').trigger('create');
// trigger the event with an object
var event = $.Event('create');
event.test = true;
$('*').trigger(event);
});
结果是:
Via delegation: string
Directly: string $.Event
我期待着:
Via delegation: string $.Event
Directly: string $.Event
我的问题是,为什么会这样?是我的期望错了还是 jQuery 错了?提前致谢!