2017-01-25 16 views
0

私は、ユーザが特に有効にしない限り、表示したくないいくつかのオプションのフィールドを持つフォームを持っています。私はいくつかのガイダンスを期待して、jQueryの.closest()メソッドを理解するのに苦労しています。このように複数の形式があるので、私はDRYのために#idを私たちに欲していませんでした。fadeIn/fadeOutチェックボックスがチェックされたときに最も近いdiv

$('.enable-stage').change(function() { 
 
    if ($(this).is(':checked')) { 
 
    $(this).closest('.stage-dates').fadeIn("slow").toggleClass("hidden"); 
 
    } else { 
 
    $(this).closest('.stage-dates').fadeOut("slow").toggleClass("hidden"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="stage"> 
 
    <h3>Stage Name</h3> 
 
    <label><input type="checkbox" class="enable-stage"> Enable Stage</label> 
 
    <div class="stage-dates hidden"> 
 
    <input type="date"> 
 
    </div> 
 
</div>

if内部console.log("checked")console.log("unchecked")を使用した場合、それが動作するので、私は一般的なif文が働いている知っています。私は.closestメソッドを誤って扱っていると思いますが、どのように/なぜかわかりません。

編集:明確にするため、チェックボックスをオンにすると最も近い.stage-dates divがフェードインされ、チェックが外されるとフェードアウトされます。

+1

をターゲットに$.next()を使用し、その後、最も近いlabelを見つけることができます(PREVを使用してみましたが)、次の( )の代わりに最も近い? –

+0

@cup_ofが最終的に解決策の一部になった、良いアイデア! – crescentfresh

答えて

2

$.closest()は、選択した要素の最初の祖先を返します。 DOM全体を検索せずに最も近いものを返します。 (labelチェックボックスに祖先であるため)ここ$.closest()を使用するには、我々は.stage-dates

$('.enable-stage').change(function() { 
 
    var $closest = $(this).closest('label').next('.stage-dates'); 
 
    if ($(this).is(':checked')) { 
 
    $closest.fadeIn("slow").toggleClass("hidden"); 
 
    } else { 
 
    $closest.fadeOut("slow").toggleClass("hidden"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="stage"> 
 
    <h3>Stage Name</h3> 
 
    <label><input checked type="checkbox" class="enable-stage"> Enable Stage</label> 
 
    <div class="stage-dates hidden"> 
 
     <input type="date"> 
 
    </div> 
 
</div>

+0

美しい。これは完璧に働いた、ありがとう。 '.closest()'の仕組みを説明してくれてありがとう。祖先でない場合、「最も近い」一致クラスを見つける方法がありますか?私は前進するにつれてこれをシフトすることを検討していますが、そこにあるオプションを知る前にそれを壊したくありません。 – crescentfresh

+0

@crescentfresh問題ありません。 jquery APIを参照することで、何が何をするかを知ることができます。 https://api.jquery.com/closest/最も近い要素を見つけるためにページをクロールする一般的な「要素を見つける」ことはありません。あなたの最善の策は、物事がどこにあるのかを絞り込むのに役立つ良いセレクタから始めることです。 '$ .find()'を使用してください。 –

+0

助けてくれてありがとう、Michael!私はもっ​​と練習が必要ですが、実際のプロジェクトがこのようなものに繋がる最善の方法かもしれないと思います!再度、感謝します! – crescentfresh

関連する問題