我有一个函数,可以在数据库中创建新记录并返回创建的记录的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>
这是选择的代码。毫无疑问,它的目标是正确的,因为无需争论就可以设置功能。</ p>
更新 这是一个范围问题。 newRunID是使用var newRunID =声明的,但这是在.done函数中进行了更改,因此是局部作用域而不是全局作用域。删除var以使其仅newRunID =起作用,因为将值分配给未声明的变量会隐式地将其创建为全局变量(它成为全局对象的属性)
答案 0 :(得分:1)
这里的问题是,您正在将变量newRunID重新定义为参数,而该参数实际上是从更改事件侦听器返回的事件对象。
.onchange = function (newRunID) {
应该是
.onchange = function () {
答案 1 :(得分:1)
(function(newRunID) {
document.getElementById(driverSelectID).onchange = function () {
assignDriver(newRunID);
}
})(newRunID);