質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

2114閲覧

Microsoft Edgeでのみ、複数のページで実装しているjQueryの動作が安定しない

takamura_leo

総合スコア6

Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2020/02/04 01:58

編集2020/02/04 02:31

経緯

サイト内に設置しているメールフォームAとメールフォームB
(共にWordpressのプラグインMW WP Formで実装)のページに
規約文章をすべてスクロールしないと規約同意するのチェックボックスを
クリックできないようにするスクリプトをjQueryで実装しています。

Google Chrome、Firefox、IE11などでは動作するのですが、
Microsoft Edgeのみ動作が安定しません。

発生している問題

Microsoft Edgeにて
メールフォームAにアクセス後にメールフォームBにアクセスすると
メールフォームBでのみjQueryが動作しません。
逆にメールフォームBにアクセス後にメールフォームAにアクセスすると
メールフォームAでのみjQueryが動作しません。
F12でコンソールを開いてみても特にエラーメッセージもなく、
どうしてこのような現象が起こっているのかが分からない状況です。

該当のソースコード

HTML

1<!-- MW WP Formにて出力 --> 2<div id="termsWrapper"> 3 <div id="terms"> 4 <!-- 各規約 --> 5 </div> 6</div> 7<label for="termscheck-1"> 8 <input type="checkbox" name="termscheck[data][]" value="ご利用規約に同意する" id="termscheck-1" /> 9 <span class="mwform-checkbox-field-text">ご利用規約に同意する</span> 10</label>

jQuery

1//(変更前) 2<script src='https://data-archives.jichodo.co.jp/mng/wp-includes/js/jquery/jquery.js?ver=1.12.4-wp'></script> 3<script> 4$(function(){ 5 document.getElementById('termscheck-1').disabled = true; 6 $('label[for="termscheck-1"]').attr('disabled',true); 7}); 8$("#termsWrapper").scroll(function(){ 9 var setTop = $(this).scrollTop(); 10 var setHeight =$("#terms").height() - 270; //#termsWrapperの高さ指定にあわせ調整 11 if ((setHeight - setTop) < 15) { 12 document.getElementById('termscheck-1').disabled = false; 13 $('label[for="termscheck-1"]').attr('disabled',false); 14 } 15}); 16</script>

jQuery

1//(修正後ソース※未解決) 2<script src='https://data-archives.jichodo.co.jp/mng/wp-includes/js/jquery/jquery.js?ver=1.12.4-wp'></script> 3<script> 4$(function(){ 5 $('#termscheck-1').prop('disabled',true); 6 $('label[for="termscheck-1"]').prop('disabled',true); 7 8 $("#termsWrapper").scroll(function(){ 9 var setTop = $(this).scrollTop(); 10 var setHeight =$("#terms").height() - 270; //#termsWrapperの高さ指定にあわせ調整 11 if ((setHeight - setTop) < 15) { 12 $('#termscheck-1').prop('disabled',false); 13 $('label[for="termscheck-1"]').prop('disabled',false); 14 } 15 }); 16}); 17</script>

メールフォームAでもメールフォームBでも
問題なくチェックボックスを制御できれば
別の記述方法でも問題ございません。
もしお心当たりがあればご指摘いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyoya0819

2020/02/04 03:04

安定しないというのは?
takamura_leo

2020/02/04 03:08

どう説明したらいいのかわからないのですが、 Microsoft Edgeにて メールフォームAにアクセス後にメールフォームBにアクセスすると メールフォームBでのみjQueryが動作せず、 逆にメールフォームBにアクセスした後にメールフォームAにアクセスすると メールフォームAでのみjQueryが動作しないという現象が起きています。 アクセスする順序によって動作したりしなかったりする状況を安定しないと表現しています。 なにか別の表現に言い換えた方がよければ修正いたします。
x_x

2020/02/06 04:01

#termsWrapper, #terms にかかるスタイルはどうなっていますか?
takamura_leo

2020/02/06 07:44

#termsWrapper には下記の通りCSSを設定しています。 #termsには特にCSSをかけておりません。 #termsWrapper { height: 300px; margin: 20px 0 30px; overflow-y: scroll; padding: 15px; border: 1px solid #a0a0a0; background: #fff; font-size: 1.3rem; line-height: 2; }
guest

回答3

0

jQueryの使い方が中途半端ですね

  • $(function(){ }のスコープに全部押し込んでください
  • getElementByIdとかやめましょう
  • attrでdisabled変えてますがpropですね

投稿2020/02/04 02:03

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takamura_leo

2020/02/04 02:27 編集

ご指摘有難うございます。 IE11での動作がうまくいかず色々試した結果でしたが、 一旦上記の通り記述を変更して確認してみます。 ----- 追記: 以下の通り変更し、Google Chrome、Firefox、IE11にて動作いたしました。 ご指摘有難うございました。 しかしやはりMicrosoft Edgeのみ動作が安定しない状況です。 $(function(){ $('#termscheck-1').prop('disabled',true); $('label[for="termscheck-1"]').prop('disabled',true); $("#termsWrapper").scroll(function(){ var setTop = $(this).scrollTop(); var setHeight =$("#terms").height() - 270; //#termsWrapperの高さ指定にあわせ調整 if ((setHeight - setTop) < 15) { $('#termscheck-1').prop('disabled',false); $('label[for="termscheck-1"]').prop('disabled',false); } }); });
guest

0

Chrome においても動作させられないので box-sizing など提示されていないものがあるのではないでしょうか?
いずれにせよスクロール最大量は scrollHeight - clientHeight で出せるので子を見る必要がありません。

JavaScript

1 var scrollMaxY = this.scrollHeight - this.clientHeight; 2 if (scrollMaxY - setTop < 15) {

https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight
https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight

投稿2020/02/06 09:08

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takamura_leo

2020/02/07 02:32

ご指摘有難うございます。 確認したところ仰るとおりChromeでもEdgeと同様の現象が発生しておりました。 box-sizingの記述は他にありませんが、お教えいただいたjsに変更いたしました。 scrollHeight、clientHeightの仕様についてご教示いただき有難うございます。 ただしこれでもEdge、Google Chromeでの動作が意図したものにならないため、 もうしばらく検証してみようと思います。
guest

0

自己解決

解決と言っていいのか不明ですが、とりあえず想定の動作にはなったので記載いたします。

まずyambejpさん、x_xさんのご指摘を参考に、以下の通りコードを記述いたしました。

HTML

1<!-- MW WP Formにて出力 --> 2<div id="termsWrapper"> 3 <!-- 各規約 --> 4</div> 5<label for="termscheck-1"> 6 <input type="checkbox" name="termscheck[data][]" value="ご利用規約に同意する" id="termscheck-1" /> 7 <span class="mwform-checkbox-field-text">ご利用規約に同意する</span> 8</label>

jQuery

1<script src='https://data-archives.jichodo.co.jp/mng/wp-includes/js/jquery/jquery.js?ver=1.12.4-wp'></script> 2<script> 3$(function(){ 4 $('#termscheck-1').prop('disabled',true); 5 $('label[for="termscheck-1"]').prop('disabled',true); 6 7 $("#termsWrapper").scroll(function(){ 8 var setTop = $(this).scrollTop(); 9 var scrollMaxY = this.scrollHeight - this.clientHeight; 10 if (scrollMaxY - setTop < 15) { 11 $('#termscheck-1').prop('disabled',false); 12 $('label[for="termscheck-1"]').prop('disabled',false); 13 } 14 }); 15}); 16</script>

この状態にするとGoogle Chrome・Microsoft Edgeにて

  1.  Aのフォーム→BのフォームでアクセスするとBのフォームで動作しない
  2.  Bのフォーム→AのフォームでアクセスするとAのフォームで動作しない
  3.  次のフォームに遷移後、スーパーリロードをすると動作する

という状況になりました。(コード変更前は3の挙動はしていませんでした)

ですので苦肉の策で、Aのフォーム、Bのフォームにアクセスした際にスーパーリロードを1度行う、という処理を記述したところ想定の動作になりました。

PHP

1<?php /* Wordpressテーマのheader.php内 */?> 2<?php if(is_page("form-a")):?> 3 <script> 4 if (window.name != "form-a") 5 { 6 location.reload(true); 7 window.name = "form-a"; 8 } 9 </script> 10<?php elseif(is_page("form-b")):?> 11 <script> 12 if (window.name != "form-b") 13 { 14 location.reload(true); 15 window.name = "form-b"; 16 } 17 </script> 18<?php else:?> 19 <script> 20 window.name = "other"; 21 </script> 22<?php endif; ?>

もっとスマートな解決方法がありそうな気もするのですが、想定の動作をしているため解決としました。
この記述がなくともFirefoxやIE11では想定の動作をしていたため、原因については不明のままです。

アドバイスをくださったお二方、有難うございました。

投稿2020/02/07 06:25

takamura_leo

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問