2

私は現在jQueryを独学しています(昨日から始めました)が、すでに立ち往生しています。相互に関連して機能する小さなドロップダウンを作成するためにこれを持っています。

$(document).ready(function(){
  var selTxt = 0;
  $(".button").click(function(){
        alert($(this).prev(".button").attr("id"));
        $(".text").slideUp(150);
        $(this).next(".text").slideToggle(150,function(){
            selTxt = $(this).prev(".button").attr("id");
        });

  });
});

jQuery を知っている人は、ボタンをクリックすると単にテキスト ボックスが展開され、展開された他のすべてのテキスト ボックスが非表示になることに気付くでしょう。

質問:

alert()関数が呼び出されている場所を見てください。その行で、ifステートメントを実行したい..次のようなもの:

$(".button").click(function(){
    if($(this).attr("id") == selTxt){
        $(".text").slideUp(150);
        $(this).next(".text").slideToggle(150,function(){
            selTxt = $(this).prev(".button").attr("id");
        });
    }
});

したがって、クリックされた要素とselTxt等しくない場合にのみ実行したいのです。idしたがって、if ステートメントの $(this) は (私が望んでいた).buttonクリックされていることを参照しますが、何を推測しますか: そうではありません! 誰も私に理由を教えてもらえませんか? .button$(this) を下に参照したので、そこでも使用できると思いましたが、明らかにそうではありません。

古き良きJSFiddleがここにあります

前もって感謝します。

4

2 に答える 2

1

それは機能します.JSfiddleでは、IDを最初のDIV要素にのみ追加し、他のすべての要素には追加していないため、要素からID属性を取得しようとするとUNDIFINEDが表示されるため、IDを追加すると大丈夫です。

于 2012-11-29T14:53:46.713 に答える
1

@Hawiak が指摘したように、問題は、HTML.attr("id")以外のすべてをテストしていて、最初の のみに属性が割り当てられていることです。しかし、私は、 でチェックすることが最善の方法だとは思いません。これが私の提案です:div.buttoniddivid

$(function() {
  $(".button").click(function() {
      var text = $(this).next(".text");

      if (!text.hasClass("open")) {
        $(".text").slideUp(150).removeClass("open");
        text.stop(true, true).slideToggle(150).addClass("open");
      }
  });

  $(".hideAll").click(function() {
    $(".text").slideUp(150).removeClass("open");
  });
});​

そして、更新された Fiddle here .

于 2012-11-29T15:00:49.843 に答える