2012-07-23 107 views
0

我知道有平變化的例子很多了,但我覺得我做錯了什麼,因爲他們沒有工作...HTML的onchange顯示/隱藏表

我有兩個表,並想展示一個取決於他們從下拉菜單中選擇什麼。

<select name="test" id="test" onchange="" size="1"> 
    <option value="0">Select Table...</option> 
    <option value="1">Table 1</option> 
    <option value="2">Table 2</option> 
</select> 

<table id = "t1" border="1"> 
<tr> 
<th>Header 1</th> 
<th>Header 2</th> 
</tr> 
<tr> 
<td>row 1, cell 1</td> 
<td>row 1, cell 2</td> 
</tr> 
<tr> 
<td>row 2, cell 1</td> 
<td>row 2, cell 2</td> 
</tr> 
</table> 

<table id = "t2" border="1"> 
<tr> 
<th> 1</th> 
<th> 2</th> 
</tr> 
<tr> 
<td> 1, 1</td> 
<td> 1, 2</td> 
</tr> 
<tr> 
<td> 2, 1</td> 
<td> 2, 2</td> 
</tr> 
</table> 

我應該放置在Onchange部分,以便它顯示了選擇的表?

我也在使用jQuery,並且知道我可以調用show()和hide()函數,但不知何故我不知道如何使用onchange =「」部分來做這件事......有任何想法嗎?

謝謝!

+0

兩個'選擇表...'和'表1'使用'值= 「0」'在'

+0

Woops,感謝指出了這一點! – user1530318 2012-07-23 17:25:17

回答

1

老實說,你不應該在onchange屬性的HTML元素中加入任何。最好將你的功能與標記分開。在亞洲其他頁面(或在該網頁引用一個單獨的JavaScript文件),你可以綁定到更改事件:

$('#test').change(function() { 
    $('#t1,#t2').hide(); 
    var tableValue = $(this).val(); 
    $('#t' + tableValue).show(); 
}); 

編輯:爲了清楚起見,最後一行是使用從select值作爲部分的目標表的id。這是基於假設這兩個將始終相關,但我想我不能準確地做出這一假設。更明確的方法是這樣的:

$('#test').change(function() { 
    $('#t1,#t2').hide(); 
    var tableValue = $(this).val(); 

    if (tableValue == 1) { 
     $('#t1').show(); 
    } else if (tableValue == 2) { 
     $('#t2').show(); 
    } 
}); 
  • 臨:的代碼更加明確。
  • 專業版:表中的selectid中的值無需手動維護以隨着代碼更改隨着時間的推移而匹配。
  • Con:添加新的select值和新表格意味着也需要修改此代碼。
+0

爲什麼你必須做#t +的東西? – user1530318 2012-07-23 17:44:48

+0

@ user1530318:它將來自'select'的值連接起來以創建一個完整的ID。爲了清晰起見,我會更新答案以包含更明確的方法... – David 2012-07-23 17:50:55

+0

對,對不起。我的實際表名稱爲「名稱」和「地址」,不僅僅是t1和t2 – user1530318 2012-07-23 17:53:14

2

如果你想使用jQuery:

$('#test').change(function() { 
    $('#t1,#t2').hide(); 
    $('#t' + $(this).val()).show(); 
}) 

jsFiddle example

只需普通的JavaScript:

var opt = document.getElementById('test'); 
opt.onchange = function() { 
    document.getElementById('t1').style.display = 'none'; 
    document.getElementById('t2').style.display = 'none'; 
    document.getElementById('t' + this.value).style.display = ''; 
}​ 

jsFiddle example

+0

jquery示例中的#t是什麼? – user1530318 2012-07-23 17:38:19

+0

類被稱爲'。' ID在JQuery和CSS中由'#'引用。 – 2012-07-23 18:05:58

+0

@ user1530318 - 這與您如何使用CSS引用ID類似。 – j08691 2012-07-23 18:10:45

0
$('select#test').on('change', function() { 
    var _tableID = $(this).val(); 

    $('table[id^="t"]').hide(); // assuming they all start with #id t then a # 
    $('#t' + _tableID).show(); // make sure the values in the select options line up 
}); 
+0

最後一行中的#t + ____是什麼? – user1530318 2012-07-23 17:44:41

+0

那麼你有所有的表#t1,#t2等,所以在這種情況下,它只是動態地抓住它們,所以它是.show()'#t + _tableID(這是Value(0,1或2)你的選擇值 – 2012-07-23 17:50:11

+0

但讓我們說,他們不只是t1或t2,如果他們有個人的名字,如果「名稱」和「地址」 如何做到這一點呢? – user1530318 2012-07-23 17:52:37