使用JavaScript在select中模拟更改选项?
例如,在站点中,有3个选择元素(步骤1、步骤2和步骤3)。我可以使用使用JavaScript在select中模拟更改选项?,javascript,Javascript,例如,在站点中,有3个选择元素(步骤1、步骤2和步骤3)。我可以使用selectElement.value=selectElement.options[I].value更改第一个元素的值,但当我更改它时,步骤2不会像我用鼠标选择它那样更新它的选项。有没有办法强迫它更新 最好的方法是使用一个函数更新第二个选择框的内容,并在更新第一个选择框的值时调用该函数。然后,在第一个选择框上会有一个change处理程序(或click处理程序,或计时器;具体取决于您对用户体验的偏好),该选择框在函数值更改时调用该
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 stuffaddEventListener
/attachEvent
)。它也不能跨浏览器工作,一些浏览器从onchange
反射属性返回字符串而不是函数,您必须eval
调用它。是的,这不适用于现代Javascript。