いつもお世話になっております。
jQueryの実装で狙い通りの挙動にならないため
質問させていただきました。
〇実現したいこと
今、4つのパネルがありjQueryのアコーディオンを利用して
一度に1つのアコーディオンだけを表示しようとしています。
初期状態(flgがinitiqlize)では、accordion1を表示、
残りのaccordion2-4は非表示にさせていますが、
こちらの挙動はうまくいっています。
しかしaccordion4を表示、残りのaccordion1,2,3を非表示に
させたとき(flgがdisplay4)ではなぜかクリックイベントが
2回発生してしまいます。
より詳細に述べると$('.accordionTrigger4 > p').click(function () に
ブレークポイントをはりflgをdisplay4とした上でaccordion4をクリックすると
処理が2度通ってしまいます。
(flgがinitializeのときは1度しか通りません)
flgがdisplay4の時でも1度しか処理が通らないようにしたいのですが、
どのように修正をすればよろしいでしょうか?
もしご助言がありましたらよろしくお願い致します。
JavaScript
1function accordion(flg) { 2 3 if (flg == 'initialize') { 4 $('.accordion2').hide(); 5 $('.accordion3').hide(); 6 $('.accordion4').hide(); 7 } else if( flg=='display4') { 8 $('.accordion1').hide(); 9 $('#accordionImg1').attr('src', './img/accordion_down.png') 10 $('.accordion2').hide(); 11 $('.accordion3').hide(); 12 $('.accordion4').slideDown(); 13 $('#accordionImg4').attr('src', './img/accordion_up.png') 14 } 15 16 $('.accordionTrigger1 > p').click(function () { 17 var display1 = $('.accordion1').css('display'); 18 19 //連打対策 20 if ($('.accordion1').not(':animated').length >= 1) { 21 $('.accordion1').slideToggle(700); 22 } 23 if (display1 == 'none') { 24 $('#accordionImg1').attr('src', './img/accordion_up.png'); 25 $('.accordion2').slideUp(700); 26 $('#accordionImg2').attr('src', './img/accordion_down.png'); 27 $('.accordion3').slideUp(700); 28 $('#accordionImg3').attr('src', './img/accordion_down.png'); 29 $('.accordion4').slideUp(700); 30 $('#accordionImg4').attr('src', './img/accordion_down.png'); 31 } else { 32 $('#accordionImg1').attr('src', './img/accordion_down.png'); 33 } 34 }) 35 $('.accordionTrigger2 > p').click(function () { 36 var display2 = $('.accordion2').css('display'); 37 38 //連打対策 39 if ($('.accordion2').not(':animated').length >= 1) { 40 $('.accordion2').slideToggle(700); 41 } 42 if (display2 == 'none') { 43 $('#accordionImg2').attr('src', './img/accordion_up.png'); 44 $('.accordion1').slideUp(700); 45 $('#accordionImg1').attr('src', './img/accordion_down.png'); 46 $('.accordion3').slideUp(700); 47 $('#accordionImg3').attr('src', './img/accordion_down.png'); 48 $('.accordion4').slideUp(700); 49 $('#accordionImg4').attr('src', './img/accordion_down.png'); 50 } else { 51 $('#accordionImg2').attr('src', './img/accordion_down.png'); 52 } 53 }) 54 $('.accordionTrigger3 > p').click(function () { 55 var display3 = $('.accordion3').css('display'); 56 57 //連打対策 58 if ($('.accordion3').not(':animated').length >= 1) { 59 $('.accordion3').slideToggle(700); 60 } 61 if (display3 == 'none') { 62 $('#accordionImg3').attr('src', './img/accordion_up.png'); 63 $('.accordion1').slideUp(700); 64 $('#accordionImg1').attr('src', './img/accordion_down.png'); 65 $('.accordion2').slideUp(700); 66 $('#accordionImg2').attr('src', './img/accordion_down.png'); 67 $('.accordion4').slideUp(700); 68 $('#accordionImg4').attr('src', './img/accordion_down.png'); 69 } else { 70 $('#accordionImg3').attr('src', './img/accordion_down.png'); 71 } 72 }) 73 $('.accordionTrigger4 > p').click(function () { 74 var display4 = $('.accordion4').css('display'); 75 76 //連打対策 77 if ($('.accordion4').not(':animated').length >= 1) { 78 $('.accordion4').slideToggle(700); 79 } 80 if (display4 == 'none') { 81 $('#accordionImg4').attr('src', './img/accordion_up.png'); 82 $('.accordion1').slideUp(700); 83 $('#accordionImg1').attr('src', './img/accordion_down.png'); 84 $('.accordion2').slideUp(700); 85 $('#accordionImg2').attr('src', './img/accordion_down.png'); 86 $('.accordion3').slideUp(700); 87 $('#accordionImg3').attr('src', './img/accordion_down.png'); 88 } else { 89 $('#accordionImg4').attr('src', './img/accordion_down.png'); 90 } 91 }) 92};
回答2件
あなたの回答
tips
プレビュー