当多个选择框存在时,jQuery select2选项冲突

时间:2019-02-06 15:23:23

标签: javascript jquery html jquery-select2

好吧

我不知道如何正确地描述问题。

这是一个很奇怪的问题。

我有两个选择框。一个国家选择。还有一个城市。

现在当我同时使用select2时。我可以从第二个选择框中包含的第一个选择框中找到选项。

HTML代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>

我的Javascript代码:

$(document).ready(function() {
        $("select[name=country]").select2({theme: "classic"});
        $("select[name=city]").select2({theme: "classic"});
    });

更新

用于澄清选择框的代码:

              <select name="country" class="country form-control" style="width:12%;border:1px solid rgb(169, 169, 169);direction:ltr;">
                        <option value="" selected>Choose country</option>
                        <?php if (isset($countryRow) && !empty($countryRow)) { ?>
                        <option value="<?php echo $countryRow['cou_name']; ?>" data-value="<?php echo $countryRow['cou_code']; ?>" id="<?php echo $countryRow['cou_id']; ?>"><?php echo $countryRow['cou_name'] . " ( " . $countryRow['cou_code'] . " ) "; ?></option><?php } else { ?>
                    <?php
                        foreach ($countryArray as $i => $cA) {
                            echo "<option id='" . $cA['cou_id'] . "' data-value='" . $cA['cou_code'] . "' value='" . $cA['cou_name'] . "'>" . $cA['cou_name'] . " ( " . $cA['cou_code'] . " ) </option>";
                        } 
                    }
                    ?>
              </select>
              <div class="input-hidden" style="display:none;"><input type='hidden' name='con_code' value='' /></div>
              <script>$(document).ready(function () {
                $("[name='country']").on("change", function () {
                    "use strict";
                    var countryCode = $("[name='country'] option:selected").attr("data-value"),       
                        htmlCode = "<input type='hidden' name='con_code' value='" + countryCode + "' />";
                    $("#phone").val(countryCode);
                    $(".input-hidden").html(htmlCode);
                }); });
              </script>
              <select name="city" class="form-control" style="width:15%;border:1px solid rgb(169, 169, 169);direction:ltr;">
                    <option value="" class="standardOption" selected>Choose country first</option>
                    <script>$(document).ready(function () {
                        $("[name='country']").on("change", function () {
                            "use strict";
                            if ($("[name='country'] option:selected").val() !== "") { 
                                var countryID = $("[name='country'] option:selected").attr("id");
                                 $.ajax({
                                    url: 'ajax.php',
                                    type: 'POST',
                                    data: {option : countryID},
                                    success: function(data) {
                                        $("[name='city']").html(data);
                                    }
                                });
                            } else {
                                $("[name='city']").html('<option value="" class="standardOption" selected>Choose country first</option>');
                            }
                        }); });
                    </script>
              </select>

预先感谢

2 个答案:

答案 0 :(得分:1)

$(document).ready(function() {
		$('.js-example-basic-single').select2();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script></script>
<select name="country" class="js-example-basic-single" style="width:100px;">
        <option value="0">USA</option>
        <option value="1">UK</option>
        <option value="2">India</option>
</select>
<select name="city" class="js-example-basic-single" style="width:100px;">
        <option value="0">Dallas</option>
        <option value="1">London</option>
        <option value="2">New York</option>
</select>

您可以为所有select提供通用的类名称,而不是在选择名称上声明“ select2”,然后将“ select2”应用于该类名称。它将在其特定的选择框中显示选项。

答案 1 :(得分:1)

最终解决。

该冲突是由ajax引起的。

解决方案是为每个containerCssClass: "customClass"添加select2()