JavaScript for循环设置属性

时间:2015-11-03 13:57:29

标签: javascript

  1. 我有几个<input>标签。我希望将类型更改为数字,如果它是type="text",所以我创建一个循环函数,但这不起作用,并且不会出现错误。

    (当我加载此页面时,我不知道如何让它从<input type="text">更改为<input type="number">,因为有很多标记,所以我认为使用for循环很快

    var a=document.getElementsByTagName("input")[i].getAttribute("type");
    function setvalue(){
        for(i=0;i<a.length;i++){
            var b=document.getElementsByTagName("input")[i]
            if (a="text"){
                b.setAttribute("text","number");
            }
        }
    }
    
  2. 我在其他页面中有多个<select>标记,看起来像<select id="inp_015"> <select id="inp_025">... <select id="inp_105">..<select id="inp_205">,最后一个数字是5,前面是01到20) 我想改变它的宽度。我在下面制作了一些代码,但也没有用。

    for(i=0;i<3;i++){
        for(i=1;y<10;i++){
            document.getElementById("inp_"+"i"+"y"+"5").style.width="125px";
        }
    }
    
  3. editted

    function setwidth(){
        for(i=0;i<3;i++){
        for(y=1;y<10;i++){
        document.getElementById("inp_"+i+y+"5").style.width="125px";
    }}}
    

    (我的脚本放在body标签的底部) 我希望我能知道哪个部分出了问题。

2 个答案:

答案 0 :(得分:0)

我不确定你的代码的上下文,但它看起来很混乱。通过一些评论,这就是你想要做的事情。

function setvalue(){
    var a=document.getElementsByTagName("input"); //moved inside function, returns array
    for(i=0;i<a.length;i++){ //loop through array
        var b=a[i]; //element in array
        var c = b.getAttribute("type");//get type attribute of element
        if (c == "text"){ //changed "=" (assignment operator) to "==" (comparison operator)
            b.setAttribute("type","number"); //changed "text" to "type"
        }
    }
}

答案 1 :(得分:0)

完成代码:

第1行:var a=document.getElementsByTagName("input")[i].getAttribute("type");

此时iundefined。因此,您获得带有“input”标签的所有元素的列表,然后从列表中获取一个元素并获取该元素的“type”属性的值。这可能会引发异常,因为对于未定义的索引,您将获得一个未定义的值,该值没有方法getAttribute()。即使它没有未定义,您也希望处理所有元素,而不仅仅是一个字符串。

第2行:function setvalue(){ for(i=0;i<a.length;i++){ var b=document.getElementsByTagName("input")[i] if (a="text"){ b.setAttribute("text","number"); } } }

您定义了一个功能。实际上,由于提升,首先定义功能。但是在您显示的代码中永远不会调用此函数。

让我们回顾一下这个功能。

for(i=0;i<a.length;i++){

这看起来没问题,只是a是一个字符串,而不是你要处理的元素数组。

var b=document.getElementsByTagName("input")[i]

这是一个功能,只要获得一个元素,但它是低效的,因为每次通过循环,你创建一个包含所有元素的新数组。

if (a="text"){

在此处检查在第1行检索到的(未定义)元素的“type”属性的值是否为文本。这与循环的迭代应处理的元素无关。

b.setAttribute("text","number");

您创建名为“text”的新属性并将其设置为“number”。这不会设置“type”属性。

您的代码可以修复,但我建议jQuery使这项任务更简单:$('input[type="text"]').attr('type', 'number')