2016-03-02 360 views
2


我想更改我的選擇的選項,當我的一個var變化。
我從這開始。 JS:更改var選擇選項

test = new Array(); 

HTML:

<select> 
</select> 

我搜索改變我的選擇,當我在測試中添加元素是這樣的:
JS:

test.push({value:1,innerHTML:opt1}) 
test.push({value:2,innerHTML:opt2}) 

HTML:

<select> 
<option value=1>opt1</option> 
<option value=2>opt2</option> 
</select> 

我可以用eventlistener或其他方法做到嗎?

+0

首先,不要使用'new Array()',而是var test = [];'那麼你不想看你的陣列有任何改變? –

回答

2

有兩種方法可以做到這一點:

一)不要使變量簡單變量,而是用一個setter函數還執行的對象DOM改變你想要的。

function Test() { 
    var self = this; 
    self.value = []; 
    self.set = function(new_obj){ 
     self.value.push(new_obj); 
     // DOM changes here 
    } 
    return self; 
} 

var test = new Test(); 

然後,當你想改變的變量,寫:

test.set({value:1,innerHTML:opt1}) 

b)利用像knockout.js一個MVC框架(它的存在是爲了解決這一確切的問題)

0

嘗試類似這樣的... var tt = ['sdfs','sdgfg']; Object.observe(tt,function(){debugger;}); tt.push('sdfds');

+0

你已經得到它:OP想知道*變量*何時改變,然後更新選擇,不知道何時改變選擇。沒有第二選擇。 – nnnnnn

+0

你是正確的nnnn .... !!!!然後...嘗試以下代碼: var tt = ['sdfs','sdgfg'] Object.observe(tt,function(){debugger;}); tt。push('sdfds') –

0

HTML:

<select id="select1" onchange="changeHandler(this)"> 
    <option value="1" >1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

JS:

document.getElementById('select1').value = 2; 
function changeHandler(select){ 
    alert(select.value); 
} 

https://jsfiddle.net/NourSammour/hp9ryekp/1/

,並觀看你的陣列,並觸發重新渲染,你可以使用

Array.observe(test, function(changes) { 
    // render 
}); 

希望這幫助:)

參考:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe

+0

這會處理select元素上的更改事件。 OP詢問如何知道*數組*的變化。 – nnnnnn

+0

@nnnnnn感謝您的回覆,我編輯我的答案,並希望這有助於! –

+1

我認爲用一種過時的方法來回答這個問題並不是一個好主意,但它並沒有被廣泛採用,並且可能會從少數支持它的瀏覽器中刪除。我不確定爲什麼Mozilla瀏覽器從不支持的功能在Mozilla文檔中。 – RobG

1

你可以代理推送方法添加您自己的邏輯:

var test = new Array(); 
var _push = test.push; 

test.push = function(el) { 
    // add options to select here 
    _push.call(this, el); 
};