やりたいこと
レスポンシブ対応時にjQueryにて、スマホ時に実行したイベントをPCレイアウト時に削除したいと思っております。
試してみたソースコード
JS
1var sp_flag = false; 2var pc_flag = false; 3// リサイズ時に取得 4$( window ).on( 'load resize', function() { 5 sp_flag = ( window.matchMedia( '(max-width:768px)' ).matches ); // IE10+ 6} ); 7$( window ).on( 'load resize', function() { 8 pc_flag = ( window.matchMedia( '(min-width:769px)' ).matches ); // IE10+ 9} ); 10$(".a > li").on("click", function() { 11 // クリック時に判断 12 if ( sp_flag ) { 13 $(this).next().slideToggle(); 14 $(this).toggleClass("is-active"); 15 $(this).closest(".X").toggleClass("is-active"); 16 } 17}); 18$(function(){ 19 if ( pc_flag ) { 20 $(".b *").removeAttr('style'); 21 } 22});
上記のコードはこちらの質問を参考にさせていただきました。
https://teratail.com/questions/43593
問題となっているところ
横幅769px以上のPCレイアウト時に、SPレイアウト時に実行したJSイベントがリセットされません。
実現したいこと
PC時にSPレイアウト時に実行したJSイベントをリセットしたいです。
教えてほしいこと
スクリプトによってHTMLに書き加えたstyle属性を削除できれば意図した動きになるため、削除しようとremoveAttrメソッドを使用したのですがうまくいかず、このメソッドの使い方を間違えているのか知りたいです。また、スマホレイアウト時に実行したイベント毎、PC時にはリセットするという方法が「実行したイベント リセット js」などで検索しても見つけられず、リセット方法がもしありましたら教えていただきたいです。
どなたかアドバイスいただけますと助かります。
よろしくお願い申し上げます。
追記(12.19)
一応スマートなコードではありませんが、実装したい動きはできました。
JS
1var sp_flag = false; 2var pc_flag = false; 3// リサイズ時に取得 4$( window ).on( 'load resize', function() { 5 sp_flag = ( window.matchMedia( '(max-width:768px)' ).matches ); // IE10+ 6} ); 7$( window ).on( 'load resize', function() { 8 pc_flag = ( window.matchMedia( '(min-width:769px)' ).matches ); // IE10+ 9} ); 10$(".a > li").on("click", function() { 11 // クリック時に判断 12 if ( sp_flag ) { 13 $(this).next().slideToggle(); 14 $(this).toggleClass("is-active"); 15 $(this).closest(".X").toggleClass("is-active"); 16 } 17}); 18$(window).resize( function() { ←追加 19 if ( pc_flag ) { 20 $(".b *").removeAttr('style'); 21 } 22});
JS
1$(window).resize( function() { 2 if ( pc_flag) {} 3});
ただこちらのコードですと、resize functionを2重で読み込みしており、現状の書き方に問題点がありそうな気がしております。もし何かお気づきの点がありましたら、ご指摘いただきたいです。
何度も申し訳ございませんが、どなたかアドバイスいただけますと幸いです。
よろしくお願い申し上げます。