 
 		# 执行回调显示前回调
 		@config['onShow'].call(@) if isFunction(@config['onShow'])
+		_fireEvent.call(@,'show') if @listeners and @listeners['show']
 
 		# 按钮绑定事件
 		@node.querySelector('.btn-ok').addEventListener('click',()->
 			self.config['ok'].call(self) if isFunction(self.config['ok'])
+			_fireEvent.call(self,'ok') if self.listeners and self.listeners['ok']
 		,false) if @node.querySelector('.btn-ok')
 
 		@node.querySelector('.btn-cancel').addEventListener('click',()->
 			k = self.config['cancel'].call(self) if isFunction(self.config['cancel'])
+			_fireEvent.call(self,'cancel') if self.listeners and self.listeners['cancel']
 			if k is false
 				return k
 			else if self

	content = @config['content'] or ''
	okVal = @config['okVal'] or '确定'
	cancelVal = @config['cancelVal'] or '取消'
	btn = (if @config['ok'] then '<a class="btn btn-ok">' + okVal + '</a>' else '') + (if @config['cancel'] then '<a class="btn btn-cancel">' + cancelVal + '</a>' else '')

	# 插入内容
	div.innerHTML = title + '<div class="tan-content">' + content + '</div><div class="tan-btn-area">' + btn + '</div>'

		@config['in'].fn = ()->
			# 显示后回调
			self.config['afterShow'].call(self) if isFunction(self.config['afterShow'])
			_fireEvent.call(self, 'afterShow') if self.listeners and self.listeners['afterShow']
		@node.classList.remove('hidden');
		animate.call(@node,@config['in']);
		@
