我有一个在数据库中创建新记录并返回创建记录的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/

10-09 20:29