首页 > 解决方案 > 功能设置不正确

问题描述

我有一个函数可以在数据库中创建一条新记录并返回创建的记录的 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= 起作用,因为将值分配给未声明的变量会隐式地将其创建为全局变量(它成为全局对象的属性)

标签: javascript

解决方案


这里的问题是您将变量 newRunID 重新定义为参数,而该参数实际上是从更改事件侦听器返回的事件对象。

.onchange = function (newRunID) { 

应该

.onchange = function () {

推荐阅读