0

我需要根据从下拉框中选择的项目进行一些操作。

因此,如果选择了带有前缀 Blue 的项目然后在下面显示一个文本框,并且如果选择了任何其他项目然后显示其他内容,我需要这样做,我怎么能以最简单的方式做到这一点?

更多解释:好的...我有一个包含项目列表的下拉菜单。我需要做的是,在他们选择带有前缀 Blue 的项目后,下拉菜单下的输入字段会显示。如果他们选择任何其他项目,就会发生其他事情。

到目前为止,我的下拉菜单是:

<select id="select1" name="selectz1">
<?php
$id = 0;
while ($row = mysql_fetch_row($result)) {
    echo "<option value=$id>$row[0]</option>";
    $id++;
}
?>
</select>

这就是 HTML 生成的内容:

<form action="ThisPage.php" method="POST">
Accounts: <br />
<select id="select1" name="selectz1">
<option value=0>account 2000-01</option><option value=1>account 2000-02</option>
<option value=2>blue 2000-03</option><option value=3>blue 2000-04</option>
</select>
</form>
4

3 回答 3

14

所以,据我所知,问题是:“如何根据 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>

需要指出的重要事项:

  1. 现代 HTML 要求value="1"引用属性值 ( )。
  2. 我们需要使用 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并玩它。您是否注意到正在发出警报valueoption那些根本不是蓝色的!我们需要实际获得选定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 手册。

于 2012-12-19T07:47:16.413 回答
0

可以使用 Javascript 来完成。

将 id 输入到您的下拉框。当它被选中时,根据其值切换 div。价值可以通过,var item= document.getElementById('id').value;。然后,

function toggle()
{

var item= document.getElementById('yourdropdownid').value;

    if(item=='yourfirstoption')
    {
    document.getElementById('div1id').style.display="block";
    document.getElementById('div2id').style.display="none";
    }
    else if(item=='yoursecondoption')
    {
    document.getElementById('div2id').style.display="block";
    document.getElementById('div1id').style.display="none";
    }
}

一个例子是here。它不是一个确切的例子。但我希望你能通过与这篇文章的联系从中找到你的解决方案。祝你好运。

于 2012-12-19T06:46:06.263 回答
0
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).on("change", "#color", function(){
        value = $(this).val().split('-')[0]; // extracting the color prefix from selected value
        if(value == 'Blue') // checking if value is Blue
        {
            $('#other').hide(); // hiding the div having id "other"
            $('#blue').show(); //showing div having id"blue"
        }

        else // if selected value have prefix other than Blue 
        {
            $('#blue').hide(); //hide the div having id "blue"
            $('#other').show(); // show the div having id "other"
        }

    });
</script>
<style>
    /* hiding both divs by default, these div will show up on dropdown change event depending upon the selected value */
    #blue, #other{display: none;}
</style>

<select id="color" name="color">
    <option value="">--Select--</option>
    <option value="Blue-value">Blue</option>
    <option value="Red-value">Red</option>
    <option value="Black-value">Black</option>
</select>

<div id="blue">
    your blue div
</div>

<div id="other">
    your other div
</div>
于 2012-12-19T06:54:28.570 回答