调用具有常量的函数时如何避免DRY问题?

Jér*_*nge 1 javascript parameters jquery constants function

我还是Javascript的新手.我需要附加一个函数来处理我的一些HTML元素上的事件.

我正在做以下事情:

$('#iinp0').keyup(function(){keyReleased('iinp0');});
$('#iinp1').keyup(function(){keyReleased('iinp1');});
$('#iinp2').keyup(function(){keyReleased('iinp2');});
$('#iinp3').keyup(function(){keyReleased('iinp3');});
$('#iinp4').keyup(function(){keyReleased('iinp4');});
$('#iinp5').keyup(function(){keyReleased('iinp5');});
$('#iinp6').keyup(function(){keyReleased('iinp6');});
$('#iinp7').keyup(function(){keyReleased('iinp7');});
Run Code Online (Sandbox Code Playgroud)

我希望我可以使用以下内容来应用"不要重复自己"(DRY)原则:

for (i=0;i<=7;i++) {

    var tmp = 'iinp' + i;
    $('#'+tmp).keyup(function(){keyReleased(tmp);});

}
Run Code Online (Sandbox Code Playgroud)

keyReleased()没有使用正确的值调用.

这个问题有解决方案吗?我的意思是有一种简单的方法来附加具有常量参数的函数吗?

Jos*_*ber 5

为什么不这么简单:

$('#iinp0, #iinp1, #iinp2, #iinp3, #iinp4, #iinp5, #iinp6, #iinp7').keyup(function()
{
    keyReleased(this.id);
});
Run Code Online (Sandbox Code Playgroud)

你甚至可以用属性选择器替换那个长选择器:

$('[id^=iinp]').keyup(function()
{
    keyReleased(this.id);
});
Run Code Online (Sandbox Code Playgroud)

这将选择id开头的任何元素iinp.

注意:此选择器比纯ID选择器慢一点 - 但更容易阅读和维护(如果您可以使用标签选择器限定它,它会更快一点).