我有一个用户配置文件表单,允许用户更改他们的地址,城市,州,zip。

下面的代码将show/hide如果国家不是美国或加利福尼亚州的states/provinces列表。

但是,如果用户已经具有存储在数据库中的此信息,则无法获取state/province来加载位置列表,并选择以前存储在数据库中的一个。当我选择隐藏state/province的不同国家/地区时,它只有效,然后选择我们。当我这样做时,那么存储在数据库中的状态也会被选中。

我对Javascript并不是很好,我相信这个问题是我只在选择国家时调用Ajax函数。如果该国已被选中,因为用户先前填写了表单,则不会发生Ajax调用。如何调用它的页面加载或国家的选择动作吗?

HTML.

profile.php

<div class="mb-3">
  <label class="form-label mb-0 fw-bold" for="country"><small>Country/Region</small></label>
  <select class="form-select" id="country" name="country">
    <option value=""></option>
    <?php include("/get_countries.php"); ?>
  </select>
</div>

<div class="mb-3" id="stateShowHide" <?php if ($stateShowHide == "hide") { print("<style=\"display:none;\">"); } ?>>
  <label class="form-label mb-0 fw-bold" for="state"><small>State/Province</small></label>
  <select class="form-select" id="state" name="state">
  </select>
</div>

javascript.

<script>
    $(document).ready(function() {
        $("#country").on('change', function() {
            var selectedCountry = $("#country option:selected").val();

            if ( this.value == "CA" || this.value == "US") {
                        
                $.ajax({
                    type: "GET",
                    url: "https://www.example.com/get_states.php?state=<?php print($state); ?>",
                    data: { country : selectedCountry }
                }).done(function(data) {
                    $("#state").html(data);
                });

                $("#stateShowHide").show();

            } else {
                $("#stateShowHide").hide();
            }

        });
    });
</script>

PHP.

get_states.php

if (isset($_GET["state"])) {
    $state = check_input($_GET["state"]);
}

foreach ($rows as $row) {
    print("<option value=\"" . $row["state"] . "\"");
    if ($state == $row["state"]) {
        print("selected");
    }
    print(">" . $row["state"] . "</option>\n");
}

截图

https://imgur.com/a/yhmKqX1.

分析解答

这可以帮助你。

<script>
    function onCountryChange(){
        var selectedCountry = $("#country option:selected").val();
        
        if (selectedCountry == "CA" || selectedCountry == "US") {
            $.ajax({
                type: "GET",
                url: "https://www.example.com/get_states.php?state=<?php print($state); ?>",
                data: { country : selectedCountry }
            }).done(function(data) {
                $("#state").html(data);
            });

            $("#stateShowHide").show();

        } else {
            $("#stateShowHide").hide();
        }
    }

    $(document).ready(function() {
        $("#country").on('change', onCountryChange);    
    });

</script>

<?php
if (isset($_GET["state"])) {
    $state = check_input($_GET["state"]);
}

foreach ($rows as $row) {
    print("<option value=\"" . $row["state"] . "\"");
    if ($state == $row["state"]) {
        print("selected");
    }
    print(">" . $row["state"] . "</option>\n");
}

echo '<script type="text/javascript">',
     'onCountryChange();',
     '</script>'
;
?>

完成您的Foreach后,请致电oncountrychange()