5

我试图从数组中具有相同 id 的多个输入中获取值。我已经使用了论坛,但没有找到适合我的解决方案。

示例

<input type="hidden" value="'+image_url+'" name="webcampics[]" id="webcampics">
<input type="hidden" value="'+image_url+'" name="webcampics[]" id="webcampics">
<input type="hidden" value="'+image_url+'" name="webcampics[]" id="webcampics">
<input type="hidden" value="'+image_url+'" name="webcampics[]" id="webcampics">


  var elem = document.getElementById("webcampics");
  var names = [];
  for (var i = 0; i < elem.length; ++ i) {
     names += elem[i]+'|';
  }
  var webcamval = names;
4

3 回答 3

6

您不应该在文档中包含具有相同ID 的元素。ID必须按照规范在整个标记中是唯一的。如果你仍然这样做,例如,方法document.getElementById只会匹配第一次出现。

使用 aclass而不是ids.

<input type="hidden" value="'+image_url+'" name="webcampics[]" class="webcampics">
<input type="hidden" value="'+image_url+'" name="webcampics[]" class="webcampics">
<input type="hidden" value="'+image_url+'" name="webcampics[]" class="webcampics">
<input type="hidden" value="'+image_url+'" name="webcampics[]" class="webcampics">

var inputs = document.getElementsByClassName( 'webcampics' ),
    names  = [].map.call(inputs, function( input ) {
        return input.value;
    }).join( '|' );

演示:http: //jsfiddle.net/QgJrq/

于 2013-01-14T15:59:18.453 回答
3

您要求的错误非常错误,建议 ID 应该是 unqiue,但是为了学习者,这就是您要执行的操作

  var elem = document.getElementsByTagName("input");
  var names = [];
  for (var i = 0; i < elem.length; ++i) {
    if (typeof elem[i].attributes.id !== "undefined") {
      if (elem[i].attributes.id.value == "webcampics") {
        names.push(elem[i].value);
      }
    }
  }
  var webcamval = names;

http://jsfiddle.net/5vamG/

由于有人在充分解释为什么上述方法是错误的后投票否决,但是完全按照您的要求进行,这是正确的方法。

将所有输入 id 更改为 class

  var elem = document.getElementsByClassName("webcampics");
  var names = [];
  for (var i = 0; i < elem.length; ++i) {
    if (typeof elem[i].value !== "undefined") {
        names.push(elem[i].value);
      }
    }
  }
  var webcamval = names;

http://jsfiddle.net/5vamG/1/

于 2013-01-14T15:58:43.543 回答
2
  1. 你不应该有多个相同的元素id

  2. getElementById只返回一个元素;使用getElementsByName它将返回您寻找的列表。

于 2013-01-14T16:01:35.923 回答