2014-06-11 29 views
0

這裏是JavaScript:的onkeyup,從文本框獲得價值,更新另一個文本框,沒有工作

function changeText(containerId) { 
    var datatext = document.getElementById('masterText').value; 
    var collection = document.getElementById(containerId).getElementsByTagName('INPUT'); 
    for (var x = 0; x < collection.length; x++) { 
     if (collection[x].type.toUpperCase() == 'TEXTBOX') 
      collection[x].value = datatext; 
    } 
} 

,這是HTML

<input id="masterText" type="textbox" onkeyup="changeText('divGrid')"><br /> 

<div id="divGrid"> 
<input type="textbox"><br /> 
<input type="textbox"><br /> 
<input type="textbox"><br /> 
<input type="textbox"><br /> 
</div> 

假設所有的文本框的值會發生變化,但不是這樣。你知道錯誤是什麼?

+0

您需要在選擇器前面加上一個#符號'changeText('divGrid')' – Shanimal

+2

沒有'',它在技術上是'' – Markasoftware

+0

@ Shanimal不,你不知道。您只需要jQuery選擇器,CSS選擇器和'querySelector' /'querySelectorAll'。 'getElementById'只需要id – Markasoftware

回答

1

正如我在評論中所述,textbox對於<input>元素不是有效的type。儘管未知類型默認爲text,但它可能會以某種方式搞砸了js(也許type屬性對於未知類型不起作用),並將其更改爲text似乎可以正常工作,正如您在此jsbin中看到的那樣:http://jsbin.com/xakoxeyi/1/

我最好的猜測在爲什麼發生這種情況是使用element.type不與未知類型的工作權利,所以它沒有價值textbox,即使這就是HTML說。解決這個問題的最好辦法是一切改變text,而不是(像我上面說的),但另一個好方法是,而不是使用collection[x].type,使用collection[x].getAttribute('type'),如使用getAttribute總是給你什麼是在HTML屬性

+0

這個問題解決了!非常感謝你:) – mjb

+0

* getAttribute *只能用於需要屬性值的地方(很少見),它在瀏覽器之間也不一致。相關的財產應該幾乎總是被使用,因爲它更可靠。在這種情況下,OP應該爲* type *使用有效值並使用直接屬性訪問。 – RobG

1

只是爲了擴大Markasoftware所說的內容:

如果您選擇使用getAttribute來獲取屬性type,那麼您的代碼就可以工作。

function changeText(containerId) { 
    var datatext = document.getElementById('masterText').value; 
    var collection = document.getElementById(containerId).getElementsByTagName('INPUT'); 
    for (var x = 0; x < collection.length; x++) { 
     if (collection[x].getAttribute('type').toUpperCase() == 'TEXTBOX') { 
      collection[x].value = datatext; 
     } 
    } 
} 

的jsfiddle:http://jsfiddle.net/MSTUe/

所以,我的猜測是,在幕後,未知類型被設定爲text輸入,但是你仍然可以查詢輸入與textbox,如果需要的話。可能對於瀏覽器可能不支持的那些非常新的(但支持不佳的)HTML5輸入(如顏色,日期時間本地,周等)。

相關問題