bootstrap modal delegate eventype语法

时间:2012-04-04 19:33:37

标签: javascript jquery events modal-dialog twitter-bootstrap

var Modal = function (content, options) {
   this.options = options
   this.$element = $(content)
   .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
                                          ^^^^^^^^^^^^^^^^^^^^
                                        What does this mean?
}

我很新鲜。我之前没有见过这种语法。我的猜测是click事件,对任何包含'dismiss'并且值为'modal'???

的属性

2 个答案:

答案 0 :(得分:5)

我认为,你所看到的是Namespaced Events。当您为同一事件提供多个事件处理程序时,会广泛使用此方法。见下面的例子,

DEMO

$('#test').on('click.a', function () {
    alert('A is clicked');
});

$('#test').on('click.b', function () {
    alert('B is clicked');
});

$('#unbindA').on('click', function () {
    $('#test').off('click.a');
});

在上面的示例中,它仅演示unbind,但它也可用于触发$('#test').trigger('click.a')等特定处理程序。

只需将“click”绑定到两个处理程序,就无法实现上述所有功能。

jQuery docs on Namespaced Events

答案 1 :(得分:0)

添加到Vega的答案:

使用事件on()调用delegate()(自jQuery 1.7起可用)或click.dismiss.modal调用意味着注册在dismiss或{{1}时触发的单击处理程序在触发事件中传递命名空间,或者在没有命名空间的情况下调用modal

click未在modal下“嵌套”(语法可能具有误导性),但它们被视为直接“附加”到dismiss。这意味着click相当于click.dismiss.modal

示例:

click.modal.dismiss

请注意,$('#elem').on('click.dismiss.modal', function () {}); $('#elem').trigger('click.dismiss'); // handler is called $('#elem').trigger('click.modal'); // handler is called $('#elem').trigger('click'); // handler is called $('#elem').trigger('click.abc'); // handler is NOT called trigger()unbind()只接受一个命名空间。

off()

您还可以使用$('#elem').off('click.dismiss'); // now the handler is just 'click.modal' 取消绑定,这将删除具有该命名空间的所有事件(不只是.dismiss)。触发器本身不适用于命名空间;点之前必须有一个事件名称。