0

我有一个如下所示的 html 代码。我想知道如何在 javascript 中动态识别 sessionEventsDecorator[0].startDateStr、sessionEventsDecorator[1].startDateStr。目的是确保用户输入的年份值不大于 2013。

<input id="sessionEventsDecorator[0].startDateStr" name="sessionEventsDecorator[0].startDateStr" class="text small" onchange="formDirty();" type="text" value="Mar 05, 2013"/&rt;


<input id="sessionEventsDecorator[1].startDateStr" name="sessionEventsDecorator[1].startDateStr" class="text small" onchange="formDirty();" type="text" value="Mar 05, 2013"/&rt;
4

3 回答 3

1
document.getElementById("sessionEventsDecorator[0].startDateStr").value <=2013

这将为您检查。但我不认为你理解 ids 是如何正常工作的。ID 不是动态的,也不能作为数组工作,它们作为单个 html 对象的唯一标识符。

像“sessionEventDecoratorDate0”这样的东西会更正常。

如果您想遍历所有这些并且不知道有多少,您可以通过以下方式获取值

var counter=0;
while (true){
  var element = document.getElementById("sessionEventsDecorator["+counter+"].startDateStr");
  if(element){
   counter++;
   //do logic here on element
  }
  else{
    break;
  }
}
于 2013-03-05T18:49:37.933 回答
0

好的,根据您对 Sebas 的回答的评论,我认为这就是您正在寻找的,基于我们可以看到您的代码:

var loopIndex = 0;

while (document.getElementById("sessionEventsDecorator[" + loopIndex + "].startDateStr"))
{
    var inputField = document.getElementById("sessionEventsDecorator[" + loopIndex + "].startDateStr");

    . . . logic to check date . . .

    loopIndex++;
}

话虽如此,您的 div 的命名约定有点令人困惑。简化 id 将有助于提高可读性。此外,如果您可以使用 JQuery 并为所有这些输入提供一个公共类,那么还有更简洁的迭代方法。

于 2013-03-05T19:03:45.013 回答
0

您应该将元素的 id 和 name 属性设置为更简单的东西:

<input type="text" class="text small" onchange="formDirty()" name="dateDecorator0" id="dateDecorator0">

<input type="text" class="text small" onchange="formDirty()" name="dateDecorator1" id="dateDecorator1">

现在我们有了一些易于使用的东西。因此,在我们的 Javascript 中,我们现在可以使用document.getElementById("dateDecorator"+i).value. 但老实说,我什至不知道为什么要在 formDirty() 函数中执行此操作,它应该看起来像这样:

function formDirty(){
    var val=this.value;
    if(val.substr(val.indexOf(",")+2) > 2013){
        this.value=val.substr(0,val.indexOf(",")+2)+"2013";
    };
}
于 2013-03-05T19:04:17.303 回答