前提環境
jQuery:v2.1.4 (minify版)
確認環境:GoogleChrome(65.0.3325.181) Developer ToolsのデバイスモードでiPhone5をエミュレートしています
実現したいこと
以下のコードにより、タッチイベント毎にulの表示をトグルしようとしています。
javascript
1 $('.target-class').on('touchstart', function() { 2 if ( $(this).hasClass('touched') === true){ 3 $(this).removeClass('touched'); 4 $(this).find('ul').slideDown(500, 'easeOutExpo'); 5 }else{ 6 $(this).addClass('touched'); 7 $(this).find('ul').slideUp(500, 'easeOutExpo'); 8 } 9 return false; 10 });
発生している問題・エラーメッセージ
以下のような謎の現象が発生します。
0. タッチする前、タッチ対象の要素のクラスは「target-class」のみ(touchedクラスは設定されていない)
0. タッチを行い、タッチイベントが発生し、冒頭のhasClass('touched')でブレイクすると、何故か$(this)のクラスは「target-class touched」になっている(touchedが付与されている)
0. 上記事象により、初回タッチ時に、$(this).hasClass('touched') === trueが正になり、ulが表示されない
試したこと
- touchedクラスが他のイベントにより付与されていないことは確認しました。
- 付与するクラスをtouchedではなくaaabbbcccdddに変更してみても、同様の事象が発生しました。
※aaabbbcccdddが付与されてしまう。
- $(this).addClass('touched');の行をコメントアウトすると、事象は発生しなくなりました。
※当然、addClassを外してしまうと、目的の動作を実現できなくなってしまいます。
- addClass/removeClassの部分をtoggleClassに変更してみても、同様の事象が発生してしまいます。
###補足情報
他のイベント(scrollやmouseenter)処理でもaddClass/removeClassを使用している箇所がありますが、そちらは問題なく動作しています。
申し訳ありませんが、都合により、ソース全文は公開できません。