在切换交互时遇到JQuery .is()问题

时间:2013-02-21 05:12:49

标签: javascript jquery coffeescript

我有这个滑块交互,我想在任何地方折叠或展开div除非他们点击那个大div中的链接,然后我只想让链接工作而不会崩溃/不崩溃。问题是,.is()(看看我在那里做了什么?)。

我正在使用jquery。

这是代码(对不起,它是在coffeescript中,但我懒得翻译):

$ ->
  # SLIDER INTERACTION
  $(".page-content").click (e) ->
    # This first part is just because ie only recognizes srcElement, not target
    if e.target
      $targ = e.target
    else $targ = e.srcElement  if e.srcElement

    # Now I check to see if they clicked a link, if so, follow the link
    if $targ.is("a")
      true

    # If they clicked a collapsed profile, expand it
    else if $(this).hasClass(".collapsed")
      $(this).css "margin-bottom": "0px"
      $(this).removeClass ".collapsed"
      $(this).find(".review-btns, .section-header, .dl-horizontal").show()

    # Otherwise, collapse it
    else
      $(this).css "margin-bottom": "20px"
      $(this).addClass ".collapsed"
      $(this).find(".review-btns, .section-header, .dl-horizontal").hide()

现在这对我来说似乎很可靠,但当我点击任何内容时,我在控制台中收到此错误:

Uncaught TypeError: Object #<HTMLDivElement> has no method 'is'

我一直在抨击桌子。这可能是愚蠢的,我在这里超出了我的深度。

提前致谢, 马特

3 个答案:

答案 0 :(得分:2)

我不知道coffeescript,但很明显你的错误源于$targ是一个DOM元素,而不是一个jQuery对象(因此没有is方法) 。我相信要解决它你只需要包装它:

if e.target
  $targ = $(e.target)
else $targ = $(e.srcElement)  if e.srcElement

(我相信这是正确的方法,在这个网站上看到other examples,但如果不是,我恐怕无法帮助你......)

答案 1 :(得分:1)

而不是$targ = e.target使用$targ = $(e.target)

或者您可以将if条件更新为

if $($targ).is("a")
      true

答案 2 :(得分:1)

快速浏览一下,看起来你没有将目标作为jQuery对象及其方法。

尝试更改

if e.target
  $targ = e.target
else $targ = e.srcElement  if e.srcElement

if e.target
  $targ = $(e.target)
else $targ = $(e.srcElement)  if e.srcElement

应该将$ targ设置为引用节点的实际jquery对象。