2011-12-20 124 views
2

我一直在負責構建一個非常簡單的應用程序,已在2行一系列的下拉列表中後,當選擇2,一個簡單的功能地連接了2個值,並給出一個輸出旁邊,像這樣:阻止刷新頁面發射功能

dropdown1 dropdown2 Output

我想要得到的是,一旦第二個下拉值選擇功能運行並顯示它說:output輸出。但目前,似乎發生的是輸出顯示在新窗口中。

這裏是我到目前爲止(HTML):

<form> 
<select id="test"> 
<option>Arena/Quantum Barcelona LTBC</option> 
<option>Arena/Quantum Spain LTES</option> 
</select> 

<select id="name" onchange="tryThis()"> 
<option>Name</option> 
<option>Name1</option> 
</select> 

</form> 

的JavaScript:

function tryThis() { 

var string, string1 = ''; 

var e = document.getElementById("test"); 
string = e.options[e.selectedIndex].text; 

var a = document.getElementById("name"); 
string1 = a.options[a.selectedIndex].text; 
document.write(string+'_'+string1); 
} 

我是不是做比它需要這個比較難?

+0

要麼創建一個新的元素,要麼設置一個現有元素的內容; 'document.write'會消滅你的頁面。我建議使用JS庫來使所有這些更容易。 – 2011-12-20 12:14:03

回答

3

這是因爲document.write清除頁面顯示的東西了。你永遠不需要使用該功能。

取而代之,您可以將其附加到例如正文:

document.body.appendChild(
    document.createTextNode(string + '_' + string2) 
); 
+0

真棒謝謝你! – zik 2011-12-20 12:16:15

1

你有沒有注意到,你的JS函數調用tryThis()和事件處理你打電話tryThsis()

然而,在你的情況我會使用document.write避免,良好的替代品追加到身體或具有DIV並改變DIV

+0

對不起,我意識到,那只是我愚蠢,但我現在糾正這個:) – zik 2011-12-20 12:15:38

0

innerHTML首先把一個ID的形式,使其更易於訪問。

var a = (function() { 
    var myForm = document.getElementById("myForm"), 
     magic = function() { 
      var a = myForm.getElementsByTagName("select"), 
       b, 
       c = []; 
      for (b = a.length - 1; b > -1; b -= 1) { 
       c.push(a[b].value); 
      } 
      alert(c.join(" ") + " output"); 
     }; 
    myForm.onclick = magic; 
}()); 

你不是具體以什麼額外的「輸出」應該是或你想怎麼傳回的數據,但是在這裏你去。您可以將結果推送到不同的表單元素的值中,而不是使用警報。不要使用document.write,因爲這不能推遲。如果您嘗試推遲document.write操作,它將替換當前頁面的全部正文內容。