对于twitter bootstrap.js插件中的modal code,我看到了这一点:
e = $.Event('show')
this.$element.trigger(e)
他们为什么不这样做$.element.show()
?
为什么要使用jQuery Event constructor?
以下是来源的show方法:
show: function () {
var that = this
, e = $.Event('show')
this.$element.trigger(e)
if (this.isShown || e.isDefaultPrevented()) return
$('body').addClass('modal-open')
this.isShown = true
escape.call(this)
backdrop.call(this, function () {
var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) {
that.$element.appendTo(document.body) //don't move modals dom position
}
that.$element.show()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element.addClass('in')
transition ?
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
that.$element.trigger('shown')
})
}
有人可以清楚地向我解释这个吗?
答案 0 :(得分:1)
那是因为它让我们有机会对这一事件做出反应。
多亏了这个,如果你想在modal打开时做出反应你只应该添加一个事件监听器:
$("#myModal").on("show", function () {
console.log("Do stuff on 'show'");
});
要清楚。他们创建了一个名为“show”的事件,但可以是任何名称,因为它仅用于该插件。即使他们打电话给“showme-the-money”,你也只能听那个事件:
$("#myModal").on("showme-the-money", function () {
console.log("Sorry i'm poor :(");
});