javascript/DOM select object onchange函数调用不起作用,但内联HTML起作用
因此,我使用firebase设计了一个站点,并从数据库中调用数据来填充select函数 我有一个js文件,其中有很多firebase的东西,比如在html/DOM完全加载后发生的身份验证,底部有一些声明的函数 设置此下拉菜单时,我从数据库中检索项目以填充它,然后执行这行代码-javascript/DOM select object onchange函数调用不起作用,但内联HTML起作用,javascript,firebase,drop-down-menu,Javascript,Firebase,Drop Down Menu,因此,我使用firebase设计了一个站点,并从数据库中调用数据来填充select函数 我有一个js文件,其中有很多firebase的东西,比如在html/DOM完全加载后发生的身份验证,底部有一些声明的函数 设置此下拉菜单时,我从数据库中检索项目以填充它,然后执行这行代码- dropDown.setAttribute("onchange", changeTable()); 要在其上添加onchange侦听器,在我的代码中,当触发onclick/selectitems值更改时,它会根据所选内容
dropDown.setAttribute("onchange", changeTable());
要在其上添加onchange侦听器,在我的代码中,当触发onclick/selectitems值更改时,它会根据所选内容使用数据库中的项重新填充一个表
问题是,此函数被调用一次,然后不会再次触发。在上面,我有这样的代码-
classes.orderByKey().on("child_added", function(snapshot) {
var z = document.createElement("option");
z.setAttribute("value", snapshot.key);
var t = document.createTextNode(snapshot.key);
z.appendChild(t);
dropDown.appendChild(z);
});
它用数据库中的项目填充下拉菜单,当这种情况发生时,函数changeTable()被调用一次(我猜是因为在添加项目时选择了一个新值),然后无论我更改了多少次选择选项,它都不会做任何事,如果我通过函数调用改为执行setAttribute(“onchange”,changeTable())来更改setAttribute部分,并将该函数中的实际代码改为字符串/内联代码,如下所示-
dropDown.setAttribute("onchange", "console.log("hello")");
那么那里的内联代码可以完美地工作吗?为什么函数调用对我来说一团糟,只启动一次,但如果我使用内联代码,它就可以工作?我想整理一下我的代码,如果可能的话做一个函数调用
作为与此问题相关的旁注,正如您在上面看到的,我正在按键顺序向下拉菜单中添加项目,我有一个根据所选选项填充的表,但我需要在将所有选项添加到select元素后填充该表,但我使用一个类似的异步函数,使用orderByValue调用数据库中的信息来实现这一点,为此,我需要从下拉列表中获取当前选定的值。我是否可以让这段代码等待所有值添加到下拉列表中执行?您不应该使用setAttribute绑定事件处理程序,应该使用addEventLister()。其次,调用该方法并将其返回的内容分配给事件
dropDown.addEventListener("change", changeTable);
不应使用setAttribute绑定事件处理程序,而应使用addEventLister()。其次,调用该方法并将其返回的内容分配给事件
dropDown.addEventListener("change", changeTable);
dropDown.setAttribute(“onchange”,changeTable())代码>是错误的。不要使用setAttribute,使用addEventListener,当您调用该方法并分配它返回的内容时,您没有绑定到该方法。dropDown.setAttribute(“onchange”,changeTable())代码>是错误的。不要使用setAttribute,使用addEventListener,如果您正在调用该方法并分配它返回的内容,那么您没有绑定到该方法。