javascript - JQuery 使用 onclick() 将类添加到 $(this)

标签 javascript jquery html

我使用 PHP 输出日历,每个表示日期的 td 元素都具有以下代码:

onclick="return getDate(2016 + /10/ + 5);"

这是在页面上调用一个函数,该函数执行两件事:

  1. 它使用 moment.js 评估传递的日期,看看它是否大于或小于当前日期(年月日)
  2. 如果日期超过当前日期,则添加 .day-selected 类,否则添加 .day-expired 类。

这是函数:

function getDate(date) {

    var dateToday = moment();
    var selectedDate = moment(date);

    if (selectedDate.isBefore(dateToday, 'day')) {
        $(this).addClass('day-expired');
        return true;
    } else {
        $(this).addClass('day-selected');
        return false;
    }
}

它不工作。我想让 $(this) 这是被单击的特定 td 元素,在单击它时根据传递的日期有一个新类。这是我迄今为止所掌握的内容的片段...

function getDate(date) {

    var dateToday = moment();
    var selectedDate = moment(date);
    
    if (selectedDate.isBefore(dateToday, 'day')) {
        $(this).addClass('day-expired');
        return true;
    } else {
        $(this).addClass('day-selected');
        return false;
    }
}
.day-selected {
    background:#7cd97c;
    color:#fff;
}

.day-expired {
    background:#ed5252;
}

.day {
  background:#0000ff;
  padding:30px;
  color:#fff;
}
<script src="http://momentjs.com/downloads/moment.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<table>
<tr>
  <td>
    <div class="day" href="" onclick="return getDate(2016 + /10/ + 2);">
      2
    </div>
  </td>
  <td>
  <div class="day" href="" onclick="return getDate(2016 + /10/ + 3);">
    3
  </div>
  </td><td id="tt-calendar-today">
  <div class="day" href="" onclick="return getDate(2016 + /10/ + 4);">
    4
  </div>
  </td><td>
  <div class="day" href="" onclick="return getDate(2016 + /10/ + 5);">
    5
  </div>
  </td><td>
  <div class="day" href="" onclick="return getDate(2016 + /10/ + 6);">
    6
  </div>
  </td><td>
  <div class="day" href="" onclick="return getDate(2016 + /10/ + 7);">
    7
  </div>
  </td><td>
  <div class="day" href="" onclick="return getDate(2016 + /10/ + 8);">
    8
  </div>
  </td>
</tr>
</table>

最佳答案

首先,DIV 标记不能具有 href 属性。其次,连接日期的需要是什么,例如2016 +/10/+ 2?为什么不直接做2016/10/2

无论如何,不​​要使用 onclick 属性,而是使用 jQuery 的 click method 附加事件处理程序。 。此外,为了传递自定义信息,我们还将使用 HTML5 data-attribute

它看起来如下:

HTML

<div class="day" data-date="2016/10/2">2</div>

JavaScript

$('.day').click(function () {
    var dateToday = moment();
    var selectedDate = moment($(this).data('date'));

    // this refers to the DIV, so we need to move one level up to get the related TD

    if (selectedDate.isBefore(dateToday, 'day')) {
        $(this).closest('td').addClass('day-expired');
    } else {
        $(this).closest('td').addClass('day-selected');
    }
});

关于javascript - JQuery 使用 onclick() 将类添加到 $(this),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39861713/

相关文章:

html - iframe 显示空白

javascript - 在载入后或firstRender之后载入第三方广告

javascript - 如何打印隐藏文章(Css/JQuery)

javascript - 为什么 push() 在循环中不起作用?

javascript - Jasmine karma 单元测试 "Error: Unexpected request: GET/Content/json/3420_layer0.json"

javascript - Twitter typeahead 要显示的不同值

jquery - WordPress 插件 slider 革命错误

jquery - 如何使用 jQuery 正确平移大于其容器的图像?

javascript - 如何对多个对象使用一个处理程序?

javascript - Extjs 5.1 图表图例