javaScript:将参数传递给 eventListener

javaScript:passing argument to eventListener

本文关键字:eventListener 参数传递 javaScript      更新时间:2023-09-26

我正在尝试制作一些东西,我制作了这段代码,但是当我按下 botton 时,它发生了一秒钟然后消失了,我是否传递了错误的参数还是什么?这里的代码是:

{
        var fil1;
        var rtextDiv;
        for (var i = 0; i < dmsg.getElementsByClassName('refilter').length; i++) {
            var refilterInput = dmsg.getElementsByClassName('refilter')[i];
            refilterInput.addEventListener('keyup', firstfilter(rtextDiv, fil1,refilterInput));
        }
    };
    function firstfilter(e, rtextDiv, fil1, refilterInput) {
        rtextDiv = refilterInput.parentNode.parentNode.getElementsByClassName('rtext')[0];
        while (rtextDiv.firstChild) {
            rtextDiv.removeChild(rtextDiv.firstChild);
        }
        fil1 = filteredPropertiesTable(res, refilterInput.value);
        rtextDiv.appendChild(fil1);
    };

编辑如评论所说:

{
        var fil1;
        var rtextDiv;
        for (var i = 0; i < dmsg.getElementsByClassName('refilter').length; i++) {
            var refilterInput = dmsg.getElementsByClassName('refilter')[i];
            refilterInput.addEventListener('keyup', function()
           {firstfilter(rtextDiv,fil1,refilterInput)(rtextDiv, fil1,refilterInput)});
         );
        }
    };
    function firstfilter(e, rtextDiv, fil1, refilterInput) {
        rtextDiv = refilterInput.parentNode.parentNode.getElementsByClassName('rtext')[0];
        while (rtextDiv.firstChild) {
            rtextDiv.removeChild(rtextDiv.firstChild);
        }
        fil1 = filteredPropertiesTable(res, refilterInput.value);
        rtextDiv.appendChild(fil1);
    };

是真的知道吗?我可以这样传递论证吗?

在这里,您实际上是在执行处理程序:

refilterInput.addEventListener('keyup', firstfilter(rtextDiv, fil1,refilterInput));

您应该只提供处理程序名称:

refilterInput.addEventListener('keyup', firstfilter);

并且处理程序可以改进:

function firstfilter(e) {
    var rtextDiv = this.parentNode.parentNode.getElementsByClassName('rtext')[0];
    while (rtextDiv.firstChild) {
        rtextDiv.removeChild(rtextDiv.firstChild);
    }
    var fil1 = filteredPropertiesTable(res, this.value); // you didn't say what is res
    rtextDiv.appendChild(fil1);
};