我有一个在数据库中创建新记录并返回创建记录的ID的函数。由此,我需要将一个函数分配给具有返回ID值的select。
.done(function(response) {
//console.log(siblings[1].dataset.contno);
var dbResponse = JSON.parse(response);
document.getElementById(runID).setAttribute('data-runid', dbResponse.id);
var newRunID = dbResponse.id;
var driverSelectID='driverSelectRun'+runCode;
//adding the onchange function with the correct ID to the dropdowns (the assignVehicle FUnction takes the runID which is unknown untill response)
(function(newRunID) {
document.getElementById(driverSelectID).onchange = function () {
assignDriver(newRunID);
}
})(newRunID);
(function(newRunID) {
document.getElementById(vehicleSelectID).onchange = function () {
assignVehicle(newRunID);
}
})(newRunID);
console.log(newRunID);
});
newRunID的console.log是1566,但是此选择的onchange函数不包含新的运行ID,它只是显示为assignVehicle(newRunID),而不是实际使用从数据库返回的值(assignVehicle(1566))。我在代码的另一部分使用了完全相同的方法,效果很好。谁能看到为什么这不能正常工作。
预先感谢您的任何答复!
<select id="driverSelectRun6">...</select>
那就是选择的代码。毫无疑问,由于功能的设置,它肯定是正确的目标。
更新
这是一个范围问题。 newRunID是使用var newRunID =声明的,但这是在.done函数中进行了更改,因此是局部作用域而不是全局作用域。删除var以使其仅newRunID =起作用,因为将值分配给未声明的变量会隐式地将其创建为全局变量(它成为全局对象的属性)
最佳答案
这里的问题是您将变量newRunID重新定义为参数,而该参数实际上是从更改事件侦听器返回的事件对象。
.onchange = function (newRunID) {
应该
.onchange = function () {
关于javascript - 功能设定不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52649033/