所以,据我所知,问题是:“如何根据 a 的值显示和隐藏表单字段<select>
?”
在我们开始之前,这是一个骗局。我对那里的答案质量非常不满意,所以我将不顾惯例并发布我自己的答案。
首先,这里的所有其他答案都完全在正确的轨道上,但他们目前无法解释他们为什么要做他们所做的事情。
和其他人一样,我将在这个例子中使用jQuery 。jQuery 是一个很棒的 Javascript 库,它极大地简化了一堆重复的、冗长的任务。jQuery 公开了一个名为$
——是的,只是一个美元符号——的函数,它允许您访问和修改页面。
第1步
让我们创建一个最小的示例,类似于您现有的代码。
<form>
<select name="select1" id="select1">
<option value="1">account 001</option>
<option value="2">account 002</option>
<option value="3">blue 001</option>
</select>
<input type="text" name="text1" id="text1">
</form>
需要指出的重要事项:
- 现代 HTML 要求
value="1"
引用属性值 ( )。
- 我们需要使用 jQuery 定位的所有元素都需要易于识别。我们在
id
这里使用 s。
第2步
让我们附加一个事件监听器。事件是您与页面交互时发生的事情。在我们的例子中,我们将监听<select>
事件change
。
<script type="text/javascript">
$(function() {
$('#select1').on('change', function(event) {
alert(this.value);
});
});
</script>
在没有太多空间的情况下,这是一大堆行话。让我解释一下。
$()
是对 jQuery 的函数调用。
$(function(){ ... })
正在向 jQuery 对象传递一个函数。这是一个快捷方式,上面写着“jQuery,当页面加载完成后,运行这个函数。”
$('#select1')
要求 jQuery 找到id
带有“select1”的元素
$('#select1').on('change', function ...)
要求 jQuery 监视change
事件,并执行请求的函数。
- 最后,在函数内部,我们将抛出一个包含元素
alert
当前值的对话框。select
这是关于 jsfiddle 的演示。
第 3 步
现在,每当更改选择菜单时,我们都会运行一些 Javascript。让我们显示和隐藏那个文本框!
首先,我们需要将其隐藏。因为我们用 Javascript 显示和隐藏它,所以我们应该告诉它只有在 Javascript 可以运行时才隐藏。对不能运行 Javascript 的人隐藏东西会让他们脾气暴躁。因此,我们将在我们的 onload 处理程序中添加一个新行:
$(function() {
$('#text1').hide();
$('#select1'). // ...
});
如果您猜到新行是“让 jQuery 隐藏 text1 元素”,那么您猜对了!
现在,我们如何观察“蓝色”选项?回到那个jsfiddle并玩它。您是否注意到正在发出警报value
?option
那些根本不是蓝色的!我们需要实际获得选定option
的值,而不仅仅是值。这有点好笑。
让我们看一下MDN 关于<select>
. 它告诉我们它将把自己暴露为HTMLSelectElement。不是什么大惊喜。它有一个名为 的属性selectedIndex
,它告诉我们option
选择了哪个,它有一个名为 的属性options
,它使我们可以直接访问选项本身。甜的!
让我们再次更新 onload:
<script type="text/javascript">
$(function() {
$('#text1').hide();
$('#select1').on('change', function(event) {
var opt = this.options[ this.selectedIndex ];
alert('You picked ' + $(opt).text());
});
});
</script>
再次,一个jsfiddle 演示。
options
有一个数组。Javascript 和 PHP 一样,使用方括号来访问数组元素。
因此,我们选择了我们的选项,然后将其包装在 jQuery 中,然后调用该text
方法来获取元素内的文本节点,而不是表单值。
太好了,现在我们有了一个字符串。我们能用它做什么?
第4步
与 PHP 一样,Javascript 也有正则表达式,一种进行模式匹配的方法。嘿,我们有一个匹配的模式!
<script type="text/javascript">
$(function() {
$('#text1').hide();
$('#select1').on('change', function(event) {
var opt = this.options[ this.selectedIndex ];
var picked_blue = $(opt).text().match(/blue/i);
if(picked_blue) {
alert('You picked a blue option!');
} else {
alert('You did not pick a blue option.');
}
});
});
</script>
再次,一个jsfiddle 演示。
我们现在使用对象match
上的方法String
来使用正则表达式。特别是,以blue
不区分大小写的方式查找字符的正则表达式(i
最后的那个)。
这段代码现在应该检测到蓝色的东西。是时候终于隐藏和显示该文本字段了!
第 5 步
让我们潜入水中。
$(function() {
$('#text1').hide();
$('#select1').on('change', function(event) {
var opt = this.options[ this.selectedIndex ];
var picked_blue = $(opt).text().match(/blue/i);
if(picked_blue) {
$('#text1').show();
} else {
$('#text1').hide();
}
});
});
</p>
你看到它来了吗?你能猜到它的作用吗?
这是jsfiddle 演示。
我们到了,任务完成了。您可以将相同的技术应用于各种东西。
请注意我在这里散布的链接,尤其是 jsfiddle,它是 Javascript 和 HTML 的绝佳游乐场,以及 MDN 站点,它们是很棒的Javascript 和 HTML 参考。哦,还有 jQuery 手册。