2017-07-07 89 views
0

我正在为我的html中的<select>标签分配'onchange'属性。我已经成功地在我的main.js文件(它捆绑到bundle.js)中完成了。我的bundle.js然后在index.html中引用。onchange()函数没有定义(从index.html无法访问?)

每当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

['阅读进度()'](https://开头developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener) – Andreas

回答

1

你可以用不同的方式。 第一种方式加入到电平变化的选择:

<select id="filter-list" name="filter" onchange="filterChanged();"> 

方式二采用事件监听:

filter.addEventListener('change', filterChanged); 

第三条道路:

window.onload=function() { 
    let filter = document.getElementById('filter-list'); 
    filter.onchange=function() { 
    // The code of your function 
    } 
} 
+0

我尝试了第一种方法(将html添加到select中),这对我以前并不适用。但是,事件侦听器方法完美地工作。谢谢 – rld001

+0

很高兴听到:) –

1

请使用:

filter.addEventListener("change", filterChanged); 
1

不要这样做:

filter.setAttribute('onchange', 'filterChanged()'); 

但做:

filter.addEventListener('change', filterChanged);