簡體   English   中英

JavaScript for 循環設置屬性

[英]JavaScript for loop to set attribute

  1. 我有幾個<input>標簽。 如果type="text" ,我想將類型更改為 number ,所以我創建了一個循環函數,但這不起作用並且沒有出現錯誤。

    (我不知道如何在加載此頁面時將其從<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"; } }

已編輯

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

(我的腳本放在 body 標簽的底部)我希望我能知道哪個部分出了問題。

我不確定你的代碼的上下文,但它看起來很混亂。 這就是您正在嘗試做的事情,並附有一些評論。

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 行: 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"); } } } 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”。 這不會設置“類型”屬性。

您的代碼可以修復,但我建議 jQuery 使此任務更簡單: $('input[type="text"]').attr('type', 'number')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM