Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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/DOM select object onchange函数调用不起作用,但内联HTML起作用_Javascript_Firebase_Drop Down Menu - Fatal编程技术网

javascript/DOM select object onchange函数调用不起作用,但内联HTML起作用

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值更改时,它会根据所选内容

因此,我使用firebase设计了一个站点,并从数据库中调用数据来填充select函数

我有一个js文件,其中有很多firebase的东西,比如在html/DOM完全加载后发生的身份验证,底部有一些声明的函数

设置此下拉菜单时,我从数据库中检索项目以填充它,然后执行这行代码-

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,如果您正在调用该方法并分配它返回的内容,那么您没有绑定到该方法。