Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript在select中模拟更改选项?_Javascript - Fatal编程技术网

使用JavaScript在select中模拟更改选项?

使用JavaScript在select中模拟更改选项?,javascript,Javascript,例如,在站点中,有3个选择元素(步骤1、步骤2和步骤3)。我可以使用selectElement.value=selectElement.options[I].value更改第一个元素的值,但当我更改它时,步骤2不会像我用鼠标选择它那样更新它的选项。有没有办法强迫它更新 最好的方法是使用一个函数更新第二个选择框的内容,并在更新第一个选择框的值时调用该函数。然后,在第一个选择框上会有一个change处理程序(或click处理程序,或计时器;具体取决于您对用户体验的偏好),该选择框在函数值更改时调用该

例如,在站点中,有3个选择元素(步骤1、步骤2和步骤3)。我可以使用
selectElement.value=selectElement.options[I].value更改第一个元素的值,但当我更改它时,步骤2不会像我用鼠标选择它那样更新它的选项。有没有办法强迫它更新

最好的方法是使用一个函数更新第二个选择框的内容,并在更新第一个选择框的值时调用该函数。然后,在第一个选择框上会有一个
change
处理程序(或
click
处理程序,或计时器;具体取决于您对用户体验的偏好),该选择框在函数值更改时调用该函数。例如(在近伪码中):

。。。
...
...
函数setValueInBox1(val){
var box1=document.getElementById(“box1”);
box1.value=val;
fillBox2();
}
document.getElementById(“框1”)。addEventListener(“更改”,填写框2);
因此,事件和逻辑都调用相同的例程,
fillBox2
。实例:

函数setValueInBox1(val){
var box1=document.getElementById(“box1”);
box1.value=val;
fillBox2();
}
document.getElementById(“框1”)。addEventListener(“更改”,填写框2);
函数fillBox2(){
var box1Value=document.getElementById(“box1”).value;
var box2=document.getElementById(“box2”);
box2.options.length=0;
对于(变量n=0;n<3;++n){
box2.options[box2.options.length]=新选项(box1Value+“-sub”+n);
}
}
选择{
最小宽度:8em;
}

A.
B
C
无-sub 1
无-次级2
无-sub 3

好吧,您可以像

document.getElementById('x').onchange();

,其中“x”是select元素的id

+1-这不仅避免了以编程方式调用事件的问题,而且是一种更好的设计,因为所有内容都不是通过用户或DOM事件强制传递的。我无法更改我的案例的HTML代码内容。有什么方法可以用纯JavaScript实现吗?@jsoldi:上面是纯JavaScript。您不必更改HTML,只需更改正在调用的事件处理程序中的JavaScript即可。在您链接到的关键站点中,这是动态连接的(不是通过
onchange
属性),实际上是调用一个名为
loadDDL2RAMPL
的函数,您可以直接调用该函数。可以通过旧的“DOM0”方式调用连接的处理程序(
onchange=
),但是当您通过
addEventListener
attachEvent
连接到处理程序时,它会很快进入特定于浏览器的内容。继续…@jsoldi:(继续)现在,碰巧那个关键站点正在使用Prototype,Prototype保留了一个列表,其中列出了在使用Prototype附加元素时附加到元素的所有事件处理程序。因此,作为一种替代方法,可以通过深入原型的内部(听起来很可怕,但它们并不那么复杂)以特定于原型的方式实现这一点。在更改SELECT元素的值之后,尝试调用
LoadDDL2Ramp()
,但仍然没有更新下一个SELECT。无论如何,是否有任何方法可以调用已附加了
addEventListener
/
attachEvent
的事件处理程序?(我在用IE)刚刚试过。没用,不知道为什么。页面是否可以使用另一个事件来更新下一个select bot?这将仅适用于以旧的“DOM0”方式连接的处理程序(
onchange=
),而不适用于DOM2 stuff
addEventListener
/
attachEvent
)。它也不能跨浏览器工作,一些浏览器从
onchange
反射属性返回字符串而不是函数,您必须
eval
调用它。是的,这不适用于现代Javascript。