2016-03-02 236 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); 
};