0

我觉得很难解释,所以如果您需要,请索取更多信息。

我有一个像这样的div:

<div id="clickable">
  <p>Some content</p>
  <a href="google.com" class="link">Google</a>
  <a href="yahoo.com">Yahoo</a>
</div>

我希望 div 是可点击的,并链接到具有类“链接”的属性的 href。这部分我做了:

  $('#clickable').on 'click', (ev) ->
    window.location = $(this).find('.link').attr('href')
    return false

但是,如果用户单击 div 内的链接,应该发生的情况是,该链接位置优先。因此,在上面的示例中,如果您单击 yahoo,它将直接指向 yahoo。目前,它迫使谷歌。

4

2 回答 2

2

无论链接的正常行为如何,都会调用更新window.location和后续(停止点击的传播)。return false

尝试这个:

$('#clickable').on('click', (ev) ->
  unless $(ev.target).is('a')
    window.location = $('.link', @).attr('href') 
    false
)
于 2012-06-27T10:25:23.703 回答
2

这是因为事件冒泡。单击a气泡到divclick触发一个处理程序div,将您重定向到.link. 由于 JavaScript 是单线程的,因此顶部处理程序作为最后一个处理程序被触发,并且您总是被重定向到.link.

尝试添加此代码:

$('#clickable').on 'click', 'a', (ev) ->
    ev.stopPropagation()

不要忘记'a'部分,它过滤点击a元素。你可以在那里使用 jQuery 的过滤器。

编辑

由于未知原因,我发布的代码段不适合您,那么这个怎么样?(这次替换代码)

$('#clickable').on 'click', (ev) ->
    if ev.target.href
        window.location = ev.target.href
        return
    window.location = $(this).find('.link').attr('href')
    return false
于 2012-06-27T10:08:40.520 回答