【问题标题】:Set 'selected' value for Select2 control with filter使用过滤器为 Select2 控件设置“选定”值
【发布时间】:2017-09-08 11:05:20
【问题描述】:

我在表单上有一个 select2 控件,该控件由用户在过滤器中键入值触发的 Ajax 调用填充。这适用于表单上的任何新条目。我遇到的问题是在编辑条目时,使用相同的表单但是我无法选择默认值,因为默认情况下表单没有任何选项。

这是表单的标记:

  <div class="form-group required">
    <label class="col-sm-2 control-label" for="input-shipping-country"><?php echo $entry_country; ?></label>
    <div class="col-sm-10">
      <select name="country_id" id="input-shipping-country" class="form-control">
        <option value=""><?php echo $text_select; ?></option>
        <?php foreach ($countries as $country) { ?>
        <?php if ($country['country_id'] == $shipping_country_id) { ?>
        <option value="<?php echo $country['country_id']; ?>" selected="selected"><?php echo $country['name']; ?></option>
        <?php } else { ?>
        <option value="<?php echo $country['country_id']; ?>"><?php echo $country['name']; ?></option>
        <?php } ?>
        <?php } ?>
      </select>
    </div>
  </div>
  <div class="form-group required">
    <label class="col-sm-2 control-label" for="input-shipping-zone"><?php echo $entry_zone; ?></label>
    <div class="col-sm-10">
      <select name="zone_id" id="input-shipping-zone" class="form-control">
      </select>
    </div>
  </div>

下面是我写的jQuery:

$(document).ready(function () {
    $('#input-shipping-country').change(function () {
       var i = $('#input-shipping-country').val();
        $('#hiddenPaymentCountryId').val(i);
    });
    $('#input-shipping-country').select2({
        placeholder: "--- Please Select ---", 
        allowClear: true
    });
    var mySelect = $('#input-shipping-zone');
    $.each( function (val, text) {
        mySelect.append(
            $('<option></option>').val(val).html(text)
        );
    });
    $('#input-shipping-zone').select2({
        placeholder: "Select a suburb",
        allowClear: true,
        ajax: {
            url: '../index.php?route=extension/total/shipping/country' ,
            dataType: 'json',
            delay: 250,
            data: function (params) {
                return {
                    country_id : (($("#hiddenShippingCountryId").val() == "") ? ($('#input-shipping-country').val()) : $("#hiddenShippingCountryId").val()),
                    filter: params.term + '%', 
                    page: params.page
                };
            },
            processResults: function (data, page) {
                var zones = [];
                data['zone'].forEach(function (d) {
                    zones.push({
                        id: d.zone_id,
                        text: d.name
                    });
                });
                return {
                    results: zones
                };
            },
        },
        minimumInputLength: 2,
    });
});

我唯一想做的就是向用户显示之前选择的选项,如果需要,可以更改。这是在 OpenCart 上实现的,并使用自定义模型来检索过滤选项。

在我第一次尝试实现这一点时,我发现使用隐藏字段并在$("#input-shipping-country") 上进行选择时填充它更容易,因此我为该区域创建了另一个隐藏字段,该区域在页面加载:

  <input type="hidden" id="hiddenShippingCountryId" value="">
  <input type="hidden" id="hiddenShippingZoneId" value="<?php echo $shipping_zone_id; ?>">

所以理论上,一旦控件初始化,我需要简单地设置选择框的值,但这里的文档不是很清楚,我的 HTML 中是否应该有一个默认选项?

【问题讨论】:

    标签: javascript jquery jquery-select2


    【解决方案1】:

    select中的所有值填好后,设置默认值为

    $('#input-shipping-country').val(1).change();//1 is value of select
    

    【讨论】:

    • 谢谢,这里的挑战是在用户选择控件并开始过滤值之前不会填写选项,如果用户不需要更改,我想避免这样做价值。
    • 你能做这个的小提琴/现场演示吗?
    • 这非常困难,因为 AJAX 调用是针对我的开发机器上托管的控制器和模型,有什么建议吗?
    • 没有 ajax ,让我们把你的 ajax 输出变量作为硬编码。
    • 如何制作小提琴?
    猜你喜欢
    • 2011-08-16
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多