我正在尝试通过使用选择标记进行按月和年查找某个日期的搜索,如果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;
答案 0 :(得分:1)
您正尝试在 DOM节点上调用indexOf
方法。哪个没有那个方法。
indexOf
是可以在arrays和strings上调用的方法......
以下是您的代码已修改为正常工作(我不喜欢该实现,但现在无法提交以使其正常运行)。
alert()
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类 上没有indexOf
,getElementById
也没有返回数组。我建议您使用innerHTML
变量中的txt
属性来编写它。
注意:我使用Babel和eslint-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
}
});