我有这个滑块交互,我想在任何地方折叠或展开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'
我一直在抨击桌子。这可能是愚蠢的,我在这里超出了我的深度。
提前致谢, 马特
答案 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对象。