javascript - 功能设置不正确
问题描述
我有一个函数可以在数据库中创建一条新记录并返回创建的记录的 ID。从这里我需要将一个函数分配给一个带有返回 ID 值的选择。
.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 () {
推荐阅读
- regression - 多元回归的偏回归图 - 残差分析
- model-view-controller - csproj ItemGroup Compile Include created 导致 AmbiguousMatchException:请求匹配多个端点
- java - 尝试使用 JAR 文件部署 Spring Boot Web 应用程序,但是在我的 JSP 上出现 404 NOT_FOUND 错误
- python-3.x - 熊猫将 1 行值与其他行值进行比较并创建一个矩阵
- kubernetes - Azure kubernetes pod 在重新启动或 hpa 工作时显示高 cpu 使用率?
- javascript - 如何将电话号码解析为 JSON
- ios - AVFoundation -> 用动画覆盖记录相机视频
- r - “闭包”类型的对象在 R Shiny 传单中不是子集
- node.js - 在 mongoose 的查询中引用另一个模型的字段
- c++ - 如何使用指向成员函数的指针进行切换?