jquery 在触发的处理程序中使用类属性

hgtggwj0  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(93)

我已经构建了一个简单的JS类,它在对象上设置了一个侦听器,并在更改事件上触发了一个方法。该方法搜索预加载的配置以找到相应的值,然后处理该值。看起来我无法从触发方法内部访问父对象的属性,除非它作为一个额外的参数传递。

class allEars{
    constructor(){
        $('#selectObj').on('change',{cfg: this}, function(ev){
            var cfg    = ev.data.cfg;
            var retVal = null;
            for(const prop in cfg)if(cfg.optList.optID==$(this.val()))retVal=cfg.optList[prop].txt;
        });

        $('#tgtObj').val(retVal).trigger("change",{p: 'param'});
    }

    async init(){// usually pulled from db, hence async
        var optList={
            777: {optID: '1', txt: "first option"},
            123: {optID: '2', txt: "second option"},
            969: {optID: 'n', txt: "option n"}
        };
    };
}
<body>
    <select id="selectObj">
        <option value="1">This</option>
        <option value="2">That</option>
        <option value="n">Other</option>
    </select>
    <input type="text" id="tgtObj" val=""/>
</body>

字符串
这是通常的行为,还是有更直接的方法?

ubby3x7f

ubby3x7f1#

问题是数据未正确传递给回调函数。在建构函式中,您会将数据当做对象常值传递至回呼函式。但是,当调用回调函数时,数据将作为字符串传递。这是因为当对象常值传递至回呼函式时,会将它转换为字串。要解决此问题,需要将数据作为引用传递给回调函数。一种方法是使用arrow函数语法。下面是修复后的代码:

class allEars {
​
constructor() {
​
$('#selectObj').on('change', (ev) =>
{
var cfg = this;
var retVal = null;
for (const prop in cfg.optList)
if (cfg.optList[prop].optID === $(this).val())
retVal = cfg.optList[prop].txt;
});
​
$('#tgtObj').val(retVal).trigger("change", { p:'param' });
}
​
async init() // usually pulled from db, hence async
{
this.optList = {
777: { optID:'1' ,txt:"first option" },
123: { optID:'2' ,txt:"second option" },
969: { optID:'n' ,txt:"option n" }
};
};
}

字符串

相关问题