2012-09-03 27 views
2

我在頁面上有各種表單,並且在頁面頂部有一個PHP生成的選擇。<Select>使用onChange只能工作一次,並使用getElementsByName設置值

我想要做的是:

  • 用戶從形式的選項。
  • 該選項的值被放入所有具有特定名稱的輸入中。
  • 用戶可以選擇另一個選項,該選項的值將替換輸入的舊值。

我至今(不工作)代碼: 它不作爲的onChange只工作觸發首次您選擇一個選項,並輸入端的值AREN」 t更新爲所選期權的價值。

的選擇:(它可以有多於或少於三個選項,根據用戶)

<select name="example" onchange="setexample()" id="exampleID"> 
<option value="1">Default Example</option> 
<option value="12">User-created Example #2</option> 
<option value="8">User-created Example #1</option> 
</select> 

這是頁面周圍的形式之一的一部分:

<form action="[URL]" method="get"> 
<input type="hidden" name="exampleform" id="example1" value=""> 
// Other inputs // 
</form> 

JavaScript:

<script> 
function setexample(){ 
setexample = document.getElementById("exampleID").options[document.getElementById("exampleID").selectedIndex].value; 
document.getElementsByName("exampleform").value = setexample; 
} 
</script> 

我不想使用jQuery。這只是JavaScript。

預先感謝您。

回答

0

getElementsByName()方法返回元素列表,因此您不能直接設置屬於列表中各個元素的value屬性。您可以通過列表需要循環(它的HTMLCollection,但爲了這個目的,你可以把它像一個數組):

var els = document.getElementsByName("exampleform"); 
for(var i = 0; i < els.length; i++) 
    els[i].value = setexample; 

對於剩下的,看RobG的答案。

+0

謝謝你的幫助。這工作完美,我不知道這是一個HTMLCollection /數組。不過,這看起來合乎邏輯。 – Anon

1

在您的代碼:

> function setexample(){ 
> setexample = document... 

分配給setexample覆蓋現有的值(也就是功能setexample)。聲明函數內的變量:

var setexample = document... 

其餘的,請參閱nnnnnn的答案。

+0

該圓圈現已完成。 +1。 – nnnnnn

+0

謝謝。我改變了它,它完美的工作! – Anon

0

你有這些問題:

  1. 你重寫你的函數的名稱,應使用不同的名稱的局部變量。

  2. 當你返回一個數組時,你引用了單個元素形式的getElementsByName。

試試這個:

<script> 
function setexample(){ 
    var item = document.getElementById("exampleID"); 
    var val = item.options[item.selectedIndex].value; 
    var list = document.getElementsByName("exampleform"); 
    for (var i = 0; i < list.lenth; i++) { 
     list[i].value = val; 
    } 
} 
</script>