4

我遇到了自定义 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 错了?提前致谢!

4

1 回答 1

1

改变了最后一行。

之前

var event = $.Event('create');
event.test = true;
$('*').trigger(event);

之后

$('*').trigger({type:'create', test:true});
于 2013-10-08T12:15:39.220 回答