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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

3回答

1205閲覧

メニューから特定の部分だけクリックした時の時間を取得して`cookie`に保管したい

n.t

総合スコア64

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

0クリップ

投稿2017/09/05 02:07

編集2017/09/05 02:39

php

1<ul class="header-menu-lists"> 2 <?php 3 $Items = []; 4 $Items[] = [ 'text'=>'a', 'addClass'=>'' ]; 5 $Items[] = [ 'text'=>'b-1', 'addClass'=>'header-menu-b-1' ]; 6 $Items[] = [ 'text'=>'b-2', 'addClass'=>'header-menu-b-2' ]; 7 $Items[] = [ 'text'=>'c', 'addClass'=>'' ]; 8 ?> 9 <?php foreach($Items as $item) { ?> 10 <li class="<?php echo $item['addClass'] ?>"><a href=""><?php echo $item['text'] ?></a></li> 11 <?php } ?> 12</ul>

js

1<script type="text/javascript"> 2$(function() { 3 var name = 'Read_date'; 4 var now =[]; 5 6 $('.header-menu-b-1 a').on('click',function(){ 7 now['b-1'] = new Date(); 8 }); 9 $('.header-menu-b-2 a').on('click',function(){ 10 now['b-2'] = new Date(); 11 }); 12 cookie = name + "=" + now + ";path=/"; 13 document.cookie = cookie; 14 15}); 16</script>

ヘッダー内にあるメニューから特定の部分だけクリックした時の時間を取得してcookieに保管したいです。
現在、このように記述して見たのですがクリックイベントが上手く取得できません。

ご助力オタだけますでしょうか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

クリックイベントが起きないのはそもそもjsエラーが出ているからですね。

Uncaught ReferenceError: now is not defined

→変数nowが未定義です

jsが動かないときはまずエラーがないかブラウザの開発ツールで確認する癖をつけましょう。

ただ、今のままだとcookieに保存する部分はページ表示時にしか動作しません

cookie = name + "=" + now + ";path=/";

document.cookie = cookie;

毎回保存したいのであればクッキー保存用のfunctionを作り、クリック時に実行するようにするか、yambejpさんの仰るようにjqueryプラグインを利用されたほうが良いでしょうね。

投稿2017/09/05 02:31

m.ts10806

総合スコア80850

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

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

n.t

2017/09/05 02:40

now変数は記入漏れでした。 開発ツールではエラーをはいてない状態でクリックイベントが取得できていない状態です。
m.ts10806

2017/09/05 02:45

クリックイベントが取得できないというのは、例えば下記のように書いて $('.header-menu-b-1 a').on('click',function(){ now['b-1'] = new Date(); alert(1); }); 1がalert出力されないということでしょうか? ちなみにどれをクリックしたときに発生しないというのはありますか? 私の方では同コードで、b-1,b-2を押したときにイベントは発生しています。 ※ブラウザにより動作に差があるかもしれません。画面遷移がないのであればhrefには#!を入れておくと良いです。
n.t

2017/09/05 03:04 編集

Chromeを利用しております。 今までconsole.logを使ってクリックイベントを見ていたのですが そもそもページ遷移していたらlog残らないですよね。。。
退会済みユーザー

退会済みユーザー

2017/09/05 03:33

クロームのコンソールの設定をよく見てください。残す設定があるはずですが
guest

0

Aリンククリックするとページが遷移してしまうので、遷移する前にクッキー操作をしなければなりません。たぶん、クリックが反応していないわけではなくてタイミングの問題です。

クッキーの操作はjs-cookie(jquery.cookieの最新版(jquery非依存になってます))が簡単かと思います。

js

1<script type="text/javascript"> 2$(function() { 3 var name = 'Read_date'; 4 var now = {}; 5 6 var clickSaver = function (node, event) { 7 now[node] = new Date(); 8 //クッキー保存 9 Cookies.set(name, now, {'path':'/'}); 10 //クッキー確認 11 console.log(Cookies.getJSON(name)); 12 }); 13 14 $('.header-menu-b-1 a').on('click', function(e){ 15 clickSaver('b-1', e); 16 }); 17 $('.header-menu-b-2 a').on('click', function(e){ 18 clickSaver('b-2', e); 19 }); 20}); 21</script>

Google Chromeでページ遷移前のログを確認したい場合はF12の「consoleタブ設定>Preserve log」にチェックを入れます。

ページ遷移を止めたい場合は、クリックイベントの中でreturn falseまたは、event.preventDefault()を実行します。

js

1 $('.header-menu-b-1 a').on('click', function(e){ 2 clickSaver('b-1', e); 3 return false; 4 }); 5 $('.header-menu-b-2 a').on('click', function(e){ 6 e.preventDefault(); //デフォルトイベントを禁止 7 clickSaver('b-2', e); 8 });

投稿2017/09/05 15:44

Tomak

総合スコア1652

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

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

0

フローはともかく、jQueryを使用する前提であればクッキーも
jquery.cookie.jsに任せたほうが楽だと思います

投稿2017/09/05 02:13

yambejp

総合スコア114777

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問