x49_n
@x49_n (らむ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

jQueryのクリックイベントがうまくいかない

phpで作成したカレンダーに不具合ありません。
sample.jsでのクリックイベントは動作します。
MAMPでローカルで開発中です.

menu.phpをsample.phpに読み込み、カレンダーのtd部分(id="plan-show")を
クリックするとmenu.phpで作成したモーダルが表示されるようにしたいです。
そして、×印をクリックすると閉じる。

sample.php
<?php
session_start();
require_once 'date.php';
require_once 'menu.php';

?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>カレンダー</title>
    <!-- CSS -->
    <link rel="stylesheet" href="sample.css">
    <!-- JQuery -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <!-- awesome -->
    <link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css">
    <!-- bootstrap  ver5.0.0-->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
    <!-- font -->
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP&display=swap" rel="stylesheet">
</head>
<body>
  <div class="container">
        <h3><a href="?ym=<?php echo $prev; ?>">&lt;</a> <?php echo $html_title; ?> <a href="?ym=<?php echo $next; ?>">&gt;</a></h3>
    <table class="table table-bordered">
      <tr>
        <th></th>
        <th></th>
        <th></th>
        <th></th>
        <th></th>
        <th></th>
        <th></th>
      </tr>
      <?php
          foreach ($weeks as $week) {
              echo $week;
          }
      ?>
    </table>
  </div>
<script src="sample.js"></script>
</body>
</html>
sample.css
.container {
  font-family: 'Noto Serif JP', serif;
}
th {
  height: 30px;
  text-align: center;
}
td {
  height: 100px;
  cursor: pointer;
  font-size: large;
}
th:nth-of-type(1), td:nth-of-type(1) {
  color: #ff0000;
}
th:nth-of-type(7), td:nth-of-type(7) {
  color: #0000ff;
}
.select{
  box-shadow: inset 0 0 0 2px #c912ee;
}
#select_day,
td.details {
  color: #5f5d60;
}
date.php
<?php

// タイムゾーンを設定
date_default_timezone_set('Asia/Tokyo');

// 前月・次月リンクが押された場合は、GETパラメーターから年月を取得
if (isset($_GET['ym'])) {
    $ym = $_GET['ym'];
} else {
    // 今月の年月を表示
    $ym = date('Y-m');
}

// タイムスタンプを作成し、フォーマットをチェックする
$timestamp = strtotime($ym . '-01');
if ($timestamp === false) {
    $ym = date('Y-m');
    $timestamp = strtotime($ym . '-01');
}

// 今日の日付 フォーマット
$today = date('Y-m-j');

// 今日の日付 テーブル用
// 年月日
// $today1 = date('Y年n月j日');
//月日
$today1 = date('n月j日');
//日
// $today1 = date('j日');

$html_title = date('Y年n月', $timestamp);

// 前月・次月の年月を取得
$prev = date('Y-m', strtotime('-1 month', $timestamp));
$next = date('Y-m', strtotime('+1 month', $timestamp));

// 該当月の日数を取得
$day_count = date('t', $timestamp);

// 1日が何曜日か 0:日 1:月 2:火 ... 6:土
$youbi = date('w', $timestamp);


// カレンダー作成の準備
$weeks = [];
$week = '';

// 第1週目:空のセルを追加
// 例)1日が水曜日だった場合、日曜日から火曜日の3つ分の空セルを追加する
$week .= str_repeat('<td></td>', $youbi);

for ( $day = 1; $day <= $day_count; $day++, $youbi++) {


    $date = $ym . '-' . $day;

    if ($today == $date) {
        // 今日の日付の場合は、class="table-info"をつける(bootstrap var5.0.0より)

        $week .= '<td class="table-info" id="plan-show">' . $day;
    } else {
        $week .= '<td id="plan-show">' . $day;
    }
    $week .= '</td>';

    // 週終わり、または、月終わりの場合
    if ($youbi % 7 == 6 || $day == $day_count) {

        if ($day == $day_count) {
            // 月の最終日の場合、空セルを追加
            // 例)最終日が木曜日の場合、金・土曜日の空セルを追加
            $week .= str_repeat('<td></td>', 6 - ($youbi % 7));
        }

        // weeks配列にtrと$weekを追加する
        $weeks[] = '<tr>' . $week . '</tr>';

        // weekをリセット
        $week = '';
    }
}

?>
sample.js
$(function() {
$("td").on("click", function() {
  // 既存の選択部分に変更があった場合リセットするクリックイベント
  $("td").removeClass("select");
  $(this).addClass("select");
  // クリックしたtdの値(日にち)を取得し出力
  $("#select_day").text($(this).text());
});

});

menu.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="menu.css">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
  <title>plan-menu</title>
</head>
<body>
<div class="wrap">
  <div class="plan-modal-wrapper" id="plan-modal">
      <div class="modal">
          <div class="close-modal">
            <i class="fa fa-2x fa-times"></i>
          </div>
        <div id="plan-form">
          <h2>menu</h2>
          <form action="#" method="POST">
            <p>
              <label for="title">タイトル</label>
              <input type="text" name="title">
            </p>
            <ul class="time">
                  <li class="time_">
                    <?php
                        //クエリパラメータから時間取得
                        $get_event_time_start = 0;
                        $get_event_time_end = 24;

                        echo "<select name=\"ご希望時間\">";
                        for ($i = $get_event_time_start * 2; $i <= $get_event_time_end * 2; $i++) {
                          echo "<option>".date("H時i分", strtotime("00:00 +". $i * 30 ." minute"));
                        }
                        echo "</select>";
                      ?>
                  </li>
                  <li class="time_"><div>~</div></li>
                  <li class="time_">
                      <?php
                          //クエリパラメータから時間取得
                          $get_event_time_start = 0;
                          $get_event_time_end = 24;

                          echo "<select name=\"ご希望時間\">";
                          for ($i = $get_event_time_start * 2; $i <= $get_event_time_end * 2; $i++) {
                            echo "<option>".date("H時i分", strtotime("00:00 +". $i * 30 ." minute"));
                          }
                          echo "</select>";
                      ?>
                  </li>
            </ul>
            <p>
              <label for="content">備考</label>
              <input type="textarea" name="content" cols="60" rows="10" wrap="hard">
            </p>
          </form>
        </div>
    </div>
  </div>
</div>
<script src="menu.js"></script>
</body>
</html>

menu.css
ul li {
  list-style: none;
}
.plan-modal-wrapper {
  display: none;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background-color: rgba(0, 0, 0, 0.6);
  z-index: 100;
}
.modal {
  position: absolute;
  top: 20%;
  left: 34%;
  background-color: #e6ecf0;
  padding: 20px 0 40px;
  border-radius: 10px;
  width: auto;
  width: 300px;
  text-align: center;
  height: auto;
  height: 435px;
}

.fa-times {
  position: absolute;
  top: 12px;
  right: 12px;
  color: rgba(128, 128, 128, 0.46);
  cursor: pointer;
}
#plan-form {
  width: 100%;
}

#plan-form h2 {
  color: #5f5d60;
  letter-spacing: 1px;
  margin-bottom: 40px;
}

#plan-form input {
  width: 220px;
  margin: 0 10% 20px 10%;
  font-size: 12px;
  padding: 12px 12px;
  border: 1px solid #d0d5d8;
  border-radius: 5px;
}

#submit-btn {
  display: inline-block;
  padding: 14px 140px;
  background-color: rgb(193, 238, 250);
  border: none;
  border-radius: 3px;
  color: white;
  margin: 10px auto;
  cursor: pointer;
}
#submit-btn:hover {
  background-color: rgb(95, 217, 251);
}
.time {
  display: flex;
}
.time_ div {
  width: 50px;
  font-size: 40px;
  color: rgba(107, 106, 106, 0.9);
}
.time_  select{
  height: 50px;
  background-color: rgb(136, 229, 255);
  font-size: 1rem;
}


menu.js
$(function() {
  $('#plan-show').on(click, function() {
    $('#plan-modal').fadeIn();
  });
  $('.close-modal').on(click, function() {
    $('#plan-modal').fadeOut();
  });

});

1

1Answer

Comments

  1. @x49_n

    Questioner

    どこが違うのか指摘してもらえると助かります!

  2. 2つHTMLを読み込んで一斉に表示しているのと同じです。

    <?php
    session_start();
    require_once 'date.php';
    require_once 'menu.php';

    ?>
    <!DOCTYPE html>
    <html lang="ja">
  3. @x49_n

    Questioner

    ありがとうございました。
    解決しました。

Your answer might help someone💌