【问题标题】:HTML select option show list after first select option selected选择第一个选择选项后的 HTML 选择选项显示列表
【发布时间】:2014-06-20 22:03:09
【问题描述】:

我有这个国家/地区表:

+----+-----------+
| ID |  Country  |
+----+-----------+
|  1 | Indonesia |
|  2 | Malaysia  |
|  3 | Brunei    |
+----+-----------+

还有这个表格:

<form action="search.php" method="post" accept-charset="utf-8">

    <label>From:</label>
    <select name="from_country">
        <option value="1">Indonesia</option>
        <option value="2">Malaysia</option>
        <option value="3">Brunei</option>
    </select>

    <label>To:</label>
    <select name="to_country">
        <option value="1">Indonesia</option>
        <option value="2">Malaysia</option>
        <option value="3">Brunei</option>
    </select>

    <input type="submit" value="Submit">
</form>

两个选择选项数据都是从我数据库中的国家/地区表中填充的,我想要做的是:

  1. 我希望在选择第一个 (from_country) 之前,第二个选择选项 (to_country) 列表为空

  2. 选择第一个 (from_country) 后,第二个选择选项 (to_country) 列表仅生成尚未被第一个选择选项 (from_country) 选择的列表。所以就像我在第一个选择选项(from_country)中选择印度尼西亚时,印度尼西亚不会显示在第二个选择选项中,除非我将第一个选项更改为另一个国家。

如何做到这一点?我应该使用php还是jquery?谢谢

更新

这是我根据帕特里克先生的回答制作的小提琴

jsfiddle

【问题讨论】:

  • 我会使用 jquery 或 javascript
  • 你能给出一个示例代码吗?

标签: php jquery html mysql


【解决方案1】:

使用 jQuery,因为 PHP 是服务器端。

<form action="search.php" method="post" accept-charset="utf-8">

<label>From:</label>
<select name="from_country" id='from'>
    <option value="1">Indonesia</option>
    <option value="2">Malaysia</option>
    <option value="3">Brunei</option>
</select>

<label>To:</label>
<select name="to_country" id='to'>
    <option value="1">Indonesia</option>
    <option value="2">Malaysia</option>
    <option value="3">Brunei</option>
</select>

<input type="submit" value="Submit">
</form>


<script>
$('#from').on('change', function() { //WHEN USER CHANGES FIRST OPTION
var fromVal = $(this).val(); //MAKE VARIABLE OF SELECTED CHOICE
$('#to option').each(function(){ //FOR EVERY SECOND OPTION
    if($(this).val() == fromVal) { //CHECK IF IT IS EQUAL TO THE FIRST SELECTED CHOICE
        $(this).attr('disabled', 'disabled'); //IF IT IS, HIDE IT
        alert($(this).val());
    } else {
        $(this).removeAttr('disabled'); //OTHERWISE SHOW IT, INCASE HIDDEN FROM PREVIOUS CHOICE
    }
});
});
</script>

JSFiddle

【讨论】:

  • 我不认为 OP 要求这个......似乎 OP 希望从第一个列表中选择的选项在从第二个列表中选择时不存在
  • @Patrick 谢谢先生,但我的意思不是隐藏第二个选择选项......对不起,我想我的英语让大家感到困惑,请参考这个例子tiketux.com
  • @TheOneandOnlyChemistryBlob 是的,先生……这就是我想做的,你能帮帮我吗? :(
  • @junior,我觉得 Patrick Geyer 的最新编辑看起来不错
  • @junior,我想我明白你想要什么了……最新更新好用吗?
【解决方案2】:

我已经测试过了,按你的要求工作

<form action="search.php" method="post" accept-charset="utf-8">
    <label>From:</label>
    <select name="from_country" id='from'>
        <option value="1">Indonesia</option>
        <option value="2">Malaysia</option>
        <option value="3">Brunei</option>
    </select>

    <label>To:</label>
    <select name="to_country" id='to'>
    </select>

    <input type="submit" value="Submit">
</form>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
$('#from').on('change', function(){
    var html = '';
    var current_id = $(this).val();
    $('#from option').each(function(){
        if(current_id != $(this).val()){
            html += '<option value="'+$(this).val()+'">'+$(this).text()+'</option>';
        }
    });

    $('#to').html(html);
});
</script>

【讨论】:

  • @SurjitSidhu 干得好!但是如果有两个以上的步骤,并且您返回更改步骤 1 - 所有其他输入都将被重置。
  • 请在这里编辑jsfiddle.net/surjitsidhu/z2Tep/2当你遇到任何错误时告诉我,我会修复它。
猜你喜欢
  • 1970-01-01
  • 2012-03-21
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多