功能设置不正确

时间:2018-10-04 14:18:52

标签: javascript

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

2 个答案:

答案 0 :(得分:1)

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

.onchange = function (newRunID) { 

应该是

.onchange = function () {

答案 1 :(得分:1)

(function(newRunID) {
      document.getElementById(driverSelectID).onchange = function () {
         assignDriver(newRunID);
      }
})(newRunID);