【问题标题】:Iterate var names using a count with javascript使用带有 javascript 的计数来迭代 var 名称
【发布时间】:2013-03-15 04:26:39
【问题描述】:

我需要编写一个循环,将以下 2 条语句迭代 44 次。

    window.onload = function() {
        var input1 = document.getElementById("alpha1");
        var input2 = document.getElementById("alpha2");
        var input3 = document.getElementById("alpha3");
        input1.onkeypress = alphaFilterKeypress;
        input2.onkeypress = alphaFilterKeypress;
        input3.onkeypress = alphaFilterKeypress;
    };

【问题讨论】:

  • 你试过什么? loops 是非常简单的构造。

标签: javascript loops var


【解决方案1】:

与其循环 44 次,为什么不委托事件呢?附加单个侦听器,并检查 id 是否与给定模式匹配

document.body.addEventlistener('keypress', alphaFilterKeypress, false);

您必须更改函数定义 - 添加此检查:

function alphaFilterKeypress(e)
{
    e = e || window.event;
    var target = e.target || e.srcElement;
    if (!target.id.match(/alpha[0-9]+/))
    {//don't handle the event
        //event was fired on an element with another (or no) id
        return e;//don't handle it here
    }
    //an element with id alpha[number] fired the event
    //handle the event
}

on this previous SO question 可以看出,您正在使用的“key” 事件的类型很重要。在keypress 事件不支持退格、控制等键的情况下……您可能更喜欢使用keydown 事件。
尝试一下,找出最适合您需求的活动

【讨论】:

  • 它将keypress事件绑定到body元素。这里没有委托。
  • @VisioN:现在有,我正在编辑 - 显示需要如何更改处理程序
  • 是的,但这不是click 事件,这是keypress。我不确定这是否可行。
  • @VisioN:应该可以,但我添加了一个关于委托/事件侦听器和各种关键*事件的相关问题。
  • 您的方法名称有误:addEventListener
【解决方案2】:

里面没有问题:

for (var i = 1; i < 45; i++) {
    var input = document.getElementById("alpha" + i);
    input.onkeypress = alphaFilterKeypress;
}

【讨论】:

  • 但是我该如何增加 input1, input2, input3 呢?
  • @KingJeremyTheWicked 不需要定义 44 个不同的变量,在循环内你可以使用一个。
  • 我已经走到了这一步……但不知道如何循环分配 input1、input2、input3 等。
  • Duh ...删除了该评论。不需要有多个变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多