显然$(x).alert('close') 期望x 是一个关闭按钮——而不是实际的警告框——所以它关闭了x 的父元素。例如,给出这个 HTML:
<div class="flashes">
<div class="message fade in">
<p>Hi <span>there!</span></p>
<p>Where is pancakes house?</p>
</div>
</div>
还有这个 CoffeeScript:
$('.flashes').on 'click', '.message', ->
$(@).find('span').alert('close')
单击将关闭第一个<p>,而留下.flashes、.message 和第二个<p>。
演示:http://jsfiddle.net/ambiguous/JJbCz/
但是,如果您将第一个孩子的 CoffeeScript 更改为 .alert('close'):
$('.flashes').on 'click', '.message', ->
$(@).find(':first-child').alert('close')
那么你应该得到你期望的结果。
演示:http://jsfiddle.net/ambiguous/wm6jh/
我没有看到您在警报中包含任何内容(即$(x).alert()),因此您可能只是在滥用.alert('close'),并且应该使用简单的手动.fadeOut 调用:
$('.flashes').on 'click', '.message', ->
$(@).fadeOut('slow')
演示:http://jsfiddle.net/ambiguous/uhV6P/