2017-07-07 24 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);