我試圖製作一個從輸入框搜索顏色數組的小部件。Rxjs - 沒有獲取可觀察到的dom元素的值
在我的搜索在我的js文件中的可觀察我引用輸入dom元素,我得到我的按鍵從。每當我嘗試獲取$ input的值時,我都會得到未定義的值。但是,當我進入控制檯時,我可以選擇元素並獲取值。這應該是更新值,以便發送到我的搜索功能的限制按鍵。目前,我將undefined發回給我的searchColors函數。
這將引發Uncaught TypeError: Cannot read property 'toLowerCase' of undefined
我覺得我的$輸入這個代碼的主要錯誤。謝謝您的幫助!
的Javascript
var Observable = Rx.Observable;
var colors = ["AliceBlue",...,"YellowGreen"].map(function (n) {return n.toLowerCase()});
var $input = document.querySelector("#bg-color-input");
var $container = document.querySelector("#bg-color-container");
var $results = document.querySelector("div#ac-list");
var $clear = document.querySelector("#bg-color-clear");
var $node, change;
function setBackground (color) {
this.style.backgroundColor = color;
}
function clearColors() {
while (this.firstChild) {
this.removeChild(this.firstChild);
}
}
function searchColors (substr) {
colors.forEach(function (color) {
if(color.indexOf(substr.toLowerCase()) > -1) {
var el = document.createElement('div');
el.innerHTML = color;
el.style.backgroundColor = color;
el.className = 'color-node col-md-1'
$results.appendChild(el)
}
})
$node = document.querySelectorAll(".color-node");
change = Observable.fromEvent($node, 'click')
.map(function (e) { return e.target.innerHTML });
change.subscribe(setBackground.bind($container));
}
var search = Observable.fromEvent($input, 'keypress').
throttle(20).
map(function (key) { return $input.value; }).
distinctUntilChanged().
map(function (search) { searchColors(search); });
var clear = Observable.fromEvent($clear, 'click').
map(function (e) { return e })
search.subscribe(searchColors.bind($results))
clear.subscribe(clearColors.bind($results))
HTML
<div class="container">
<div id="bg-color-container">
<h1>Change the Background Color</h1>
<p>
By entering a valid named CSS color you can change the background color of this div.
</p>
<input type="text" id="bg-color-input">
<button id="bg-color-clear">Clear</button>
<div class="row" id="ac-list">
</div>
</div>
這裏是我的代碼jsbin http://jsbin.com/ravagi/edit?html,js,output
謝謝!我沒有意識到按鍵不會記錄價值,並且我沒有返回搜索。我更新了代碼,以便反映您的更改。 – jmarthernandez