带有Select标签的JavaScript搜索日期

时间:2017-12-20 21:09:06

标签: javascript jquery

我正在尝试通过使用选择标记进行按月和年查找某个日期的搜索,如果txt包含月份的值和字符串中年份的值,那​​么我想要显示警报,但我收到错误txt.indexOf is not a function



var txt = document.getElementById('txt');
today = new Date();

txt.innerHTML = ('' + today.toLocaleDateString() + ' ' + today.getHours() + ':' + today.getMinutes());

var month = document.getElementById('month');
var year = document.getElementById('year');
var btn = document.getElementById('btn');

btn.addEventListener('click', () => {
  if (txt.indexOf(month.value) & txt.indexOf(year.value)) {
    alert('yay');
    console.log('yay');
  }
});

<p id="txt"></p>

<select id="month">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
  <option>6</option>
  <option>7</option>
  <option>8</option>
  <option>9</option>
  <option>10</option>
  <option>11</option>
  <option>12</option>
</select>

<select id="year">
  <option>2016</option>
  <option>2017</option>
  <option>2018</option>
</select>

<button id="btn">
  search
</button>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您正尝试在 DOM节点上调用indexOf方法。哪个没有那个方法。

indexOf是可以在arraysstrings上调用的方法......

以下是您的代码已修改为正常工作(我不喜欢该实现,但现在无法提交以使其正常运行)。

  • 请不要在2017年使用alert()
  • 切换到const / let而不是var
  • 重新考虑您的代码结构

var txtElement = document.getElementById('txt');
today = new Date();

var dateString = '' + today.toLocaleDateString() + ' ' + today.getHours() + ':' + today.getMinutes();
txtElement.innerHTML = dateString;
txtElement.setAttribute('data-month', today.getMonth() + 1);
txtElement.setAttribute('data-year', today.getFullYear());

var month = document.getElementById('month');
var year = document.getElementById('year');
var btn = document.getElementById('btn');

btn.addEventListener('click', () => {
  var currentMonth = txtElement.getAttribute('data-month');
  var currentYear = txtElement.getAttribute('data-year');
  if (currentMonth === month.value && currentYear === year.value) {
    alert('yay');
    console.log('yay');
  }
});
<p id="txt"></p>

<select id="month">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
  <option>6</option>
  <option>7</option>
  <option>8</option>
  <option>9</option>
  <option>10</option>
  <option>11</option>
  <option>12</option>
</select>

<select id="year">
  <option>2016</option>
  <option>2017</option>
  <option>2018</option>
</select>

<button id="btn">
  search
</button>

答案 1 :(得分:0)

嗯,首先,Element 上没有indexOfgetElementById也没有返回数组。我建议您使用innerHTML变量中的txt属性来编写它。

注意:我使用Babeleslint-config-airbnb,因此您的风格可能会有所不同。

const txt = document.getElementById('txt');
const today = new Date();

txt.innerHTML = `${today.toLocaleDateString()} ${today.getHours()}:${today.getMinutes()}`;

const month = document.getElementById('month');
const year = document.getElementById('year');
const btn = document.getElementById('btn');

btn.addEventListener('click', () => {
  const value = txt.innerHTML;
  if (value.includes(month.value) && value.includes(year.value)) {
    alert('yay'); // eslint-disable-line no-alert
    console.log('yay'); // eslint-disable-line no-console
  }
});