我正在为html中的<select>
标记分配'onchange'属性。我已经在我的main.js文件中成功完成了(它被捆绑到bundle.js中)。然后在index.html中引用我的bundle.js。
每当onchange事件尝试使用我定义的函数时
filterChanged()
,它提供了一个引用错误:“filterChanged未定义
在HTMLSelectElement.onchange“
我原本以为可能是由于函数不是全局变量,所以我分配到var
并且问题仍然存在。
见下面的代码 -
main.js
var filterChanged = function() {
console.log('filter changed');
}
window.onload = function() {
let filter = document.getElementById('filter-list');
filter.setAttribute('onchange', 'filterChanged()');
}
的index.html
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>TestProj</title>
<script type="text/javascript" charset="UTF-8" src="build/bundle.js"></script>
</head>
<body>
<h3>Todos</h3>
<p>Number of items to show</p>
<select id="filter-list" name="filter">
<option selected="true" value="list10">10</option>
<option value="list20">20</option>
<option value="list30">30</option>
</select>
<ul id="todo_list">
<!-- Inject list here with JS (main.js getTodos()) -->
</ul>
</body>
</html>
答案 0 :(得分:3)
您可以使用不同的方式。 第一种方法是在您的选择中添加onchange:
<select id="filter-list" name="filter" onchange="filterChanged();">
使用eventListener的第二种方式:
filter.addEventListener('change', filterChanged);
第三种方式:
window.onload=function() {
let filter = document.getElementById('filter-list');
filter.onchange=function() {
// The code of your function
}
}
答案 1 :(得分:1)
请使用:
{{1}}
答案 2 :(得分:1)
不要这样做:
filter.setAttribute('onchange', 'filterChanged()');
但是:
filter.addEventListener('change', filterChanged);
答案 3 :(得分:1)
这是addEventListener()
的常用格式object.addEventListener("change", myScript);
所以更新你的代码
filter.setAttribute('onchange', 'filterChanged()');
到
filter.addEventListener('change', filterChanged);
了解更多信息
https://www.w3schools.com/jsref/met_document_addeventlistener.asp
答案 4 :(得分:1)
这样就行了,你不需要在