javascript - 在一个页面上同时显示级联列表

标签 javascript php jquery html drop-down-menu

我有级联下拉列表的代码,有助于执行搜索。

它工作得很好,也显示了结果,但问题是,

第一次加载页面时,显示第一个下拉列表,当从中选择一个值时,显示第二个下拉列表,从第二个下拉列表中选择一个值后执行搜索。

我希望在选择下拉列表时,两个下拉列表应该一起显示,

然而,第二个下拉列表应该包含任何值,或者可以禁用(首选)并且仅当从第一个下拉列表中选择一个值时才启用。

索引.php

    <body>
    <div id="container">
        <div id="body">
            <div class="mhead"><h2></h2></div>
            <div id="dropdowns">
                <div id="center" class="cascade">
                    <?php
                    $sql = "SELECT * FROM search_parent ORDER BY searchname";
                    $query = mysqli_query($con, $sql);
                    ?>
                    <label>Country:
                        <select name="country" id = "drop1">
                            <option value="">Please Select</option>
                            <?php while ($rs = mysqli_fetch_array($query, MYSQLI_ASSOC)) { ?>
                                <option value="<?php echo $rs["id"]; ?>"><?php echo $rs["searchname"]; ?></option>
                            <?php } ?>
                        </select>
                    </label>
                </div>
                <div class="cascade" id="state"></div> 
                <div id="city" class="cascade"></div> 
            </div>
        </div>
    </div>
    <div class="showsearch"> </div>
    <p>&nbsp;</p>
    <script src="jquery-1.11.1.js"></script>
    <script>
        $(document).ready(function (){
            $("select#drop1").change(function (){
                var parent_id = $("select#drop1 option:selected").attr('value');
                // alert(parent_id);    
                $("#state").html("");
                //$("#city").html( "" );
                if (parent_id.length > 0)
                {
                    $.ajax({
                        type: "POST",
                        url: "fetch_state.php",
                        data: "parent_id=" + parent_id,
                        cache: false,
                        beforeSend: function ()
                        {
                            $('#state').html('<img src="loader.gif" alt="" width="24" height="24">');
                        },
                        success: function (html)
                        {
                            $("#state").html(html);
                        }
                    });
                }
            });
        });
    </script>
</body>

获取状态.php

    <?php
include("connection.php");
$parent_id = trim(mysql_escape_string($_POST["parent_id"]));

$sql = "SELECT * FROM features WHERE parent_id = '" . $parent_id . "' ORDER BY fname";
$count = mysqli_num_rows(mysqli_query($con, $sql));
if ($count > 0) {
    $query = mysqli_query($con, $sql);
    ?>
    <label>State: 
        <select name="state" id="drop2">
            <option value="">Please Select</option>
            <?php while ($rs = mysqli_fetch_array($query, MYSQLI_ASSOC)) { ?>
                <option value="<?php echo $rs["id"]; ?>"><?php echo $rs["fname"]; ?></option>
            <?php } ?>
        </select>
    </label>
<?php } ?>
<script src="jquery-1.11.1.js"></script>
<script>
    $(document).ready(function () {
        $('#drop2').on('change', function () {
            //var fname = $(this).val();
            var fname = $(this).find('option:selected').text();
            // rename your file which include $fname  with get_search_data.php
            if (fname !== "") {
                $.post('get_search_data.php', {fname: fname}, function (data) {<!--get_search_data.php is used to perform search--->
                    $('.showsearch').html(data);
                });
            }
        });
    });
</script>

最佳答案

将两个下拉菜单都放在 index.php 中,但给第二个下拉菜单一个 disabled 属性。也给它一个值:

<select name="state" id="drop2" disabled="true">
<option value="">Please Select</option>
</select>

现在将以下内容放入您的 $(document).ready 中:

$('#drop1').change(function(){
    $('#drop2').prop("disabled", false);
});

这将禁用第二个下拉列表,直到第一个选择一个值。
fetch_state.php 中的 JS 放在其余的下面。 现在,当您选择一个值时,下拉列表将被启用并被填充。

结果应该是这样的:

<body>
<div id="container">
    <div id="body">
        <div class="mhead"><h2></h2></div>
        <div id="dropdowns">
            <div id="center" class="cascade">
                <?php
                $sql = "SELECT * FROM search_parent ORDER BY searchname";
                $query = mysqli_query($con, $sql);
                ?>
                <label>Country:
                    <select name="country" id = "drop1">
                        <option value="">Please Select</option>
                        <?php while ($rs = mysqli_fetch_array($query, MYSQLI_ASSOC)) { ?>
                            <option value="<?php echo $rs["id"]; ?>"><?php echo $rs["searchname"]; ?></option>
                        <?php } ?>
                    </select>
                </label>
            </div>
            <div class="cascade" id="state">
             <label>State: 
                <select name="state" id="drop2" disabled="true">
                <option value="">Please Select</option>
                </select>
            </label>
            </div> 
            <div id="city" class="cascade"></div> 
        </div>
    </div>
</div>
<div class="showsearch"> </div>
<p>&nbsp;</p>
<script src="jquery-1.11.1.js"></script>
<script>
    $(document).ready(function (){
        $("select#drop1").change(function (){
            var parent_id = $("select#drop1 option:selected").attr('value');
            // alert(parent_id);    
            $("#state").html("");
            //$("#city").html( "" );
            if (parent_id.length > 0)
            {
                $.ajax({
                    type: "POST",
                    url: "fetch_state.php",
                    data: "parent_id=" + parent_id,
                    cache: false,
                    beforeSend: function ()
                    {
                        $('#state').html('<img src="loader.gif" alt="" width="24" height="24">');
                    },
                    success: function (html)
                    {
                        $("#state").html(html);
                    }
                });
            }
        });

         $('.drop1').change(function(){
            $('.drop2').prop("disabled", false);
         });

         $('#drop2').on('change', function () {
        //var fname = $(this).val();
        var fname = $(this).find('option:selected').text();
        // rename your file which include $fname  with get_search_data.php
        if (fname !== "") {
            $.post('get_search_data.php', {fname: fname}, function (data) {<!--get_search_data.php is used to perform search--->
                $('.showsearch').html(data);
            });
        }
    });
    });
</script>
</body>

关于javascript - 在一个页面上同时显示级联列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27416744/

相关文章:

php - Codeigniter mysql 按位运算符

jquery - 悬停事件处理程序总是失败

javascript - 防止 $(window).on('scroll function) 在 .click 函数之后触发

javascript - 为什么当我执行 console.log 时,函数中的对象返回为 'undefined' ? (了解创建阶段、执行阶段)

javascript - 在 Adob​​e Edge 中加载时重新加载 iframe

php - 相对定位导致的 HTML 布局额外间距

php - 调用函数 - 变量

javascript - 如何使 <div> 元素跟随另一个元素但不在行中?

javascript - 在javascript中使用正则表达式提取单词

javascript - 点击 HTML5 Canvas 圆圈