1

私は、その大きな 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'

私はずっとテーブルに頭をぶつけていました。それはおそらく愚かなことです、私はここで私の深さを超えています。

前もってありがとう、マット

4

3 に答える 3

2

私はcoffeescriptを知りませんが、あなたのエラーがjQueryオブジェクトではなくDOM要素であるという事実に起因することは明らかです$targ(したがって、メソッドはありませんis)。ラップするだけで修正できると思います:

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

(このサイトの他の例を見て、これが正しい方法だと思いますが、そうでない場合は、私はあなたを助けることができないと思います...)

于 2013-02-21T05:23:09.800 に答える
1

$targ = e.target使用する代わりに$targ = $(e.target)

または、if条件を次のように更新できます

if $($targ).is("a")
      true
于 2013-02-21T05:23:03.497 に答える
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 オブジェクトに設定する必要があります。

于 2013-02-21T05:28:16.587 に答える