【问题标题】:I have three dropdown and I want that when I select the value of first dropdown, that value should not appear in second dropdown我有三个下拉列表,我希望当我选择第一个下拉列表的值时,该值不应出现在第二个下拉列表中
【发布时间】:2019-03-20 04:29:29
【问题描述】:
<select class="js-example-templating" name="mem1">
            <?php
              $query = "select * from user";
              $query_result = query($query);
            while($row = fetch_array($query_result)) {
                echo "<option value='{$row['user_id']}'>{$row['user_id']} - {$row['name']}</option>";
            }
            ?>
          </select>
          <br><br>
          <select class="js-example-templating" name="mem2">
            <?php
              $query = "select * from user";
              $query_result = query($query);
            while($row = fetch_array($query_result)) {
                echo "<option value='{$row['user_id']}'>{$row['user_id']} - {$row['name']}</option>";
            }
            ?>
          </select>
          <br><br>
          <select class="js-example-templating" name="mem3">
            <?php
              $query = "select * from user";
              $query_result = query($query);
            while($row = fetch_array($query_result)) {
                echo "<option value='{$row['user_id']}'>{$row['user_id']} - {$row['name']}</option>";
            }
            ?>
          </select>

function formatState (state) {
  if (!state.id) {
    return state.text;
  }
    var $state = $(
    '<span>' + state.text + '</span>'
  );
  return $state;
};
$(".js-example-templating").select2({
  templateResult: formatState
});
</script>

我有 3 个下拉列表,我希望当我选择第一个下拉列表中的值时,该值不会出现在第二个和第三个下拉列表中,当我选择第二个下拉列表的值时,该值不会出现在第三个下拉列表中。我正在使用 Select2 库在下拉列表中进行实时搜索,并且由于该 select2 库,AJAX 调用不起作用,否则它将非常容易。任何帮助将不胜感激。

【问题讨论】:

  • 您必须使用 javascript 数组数据源并为第二个和第三个下拉菜单更新这些数组。
  • 或者您可以添加一些 javascript 并在更改任何下拉列表时只需在以下下拉列表中隐藏所选选项。

标签: javascript jquery-select2


【解决方案1】:

您需要更改所有三个 select2 下拉菜单的数据。现在,您为所有三个下拉菜单提供相同的数据。您可以在这里尝试两种方法:

1.创建一个具有初始值的数组。当第一个下拉列表选择某个值时,将除所选值之外的数组值复制到不同的数组。现在将此数组用于第二个下拉列表。您可以在下拉菜单上使用 onchange 事件来检测更改并更新数组以用于下一个下拉菜单。

<select class="js-example-templating1" name="mem1" onchange="updateNextArray()">
        <?php
          $query = "select * from user";
          $query_result = query($query);
        while($row = fetch_array($query_result)) {
            echo "<option value='{$row['user_id']}'>{$row['user_id']} - {$row['name']}</option>";
        }
        ?>
      </select>
      <br><br>
      <select class="js-example-templating2" name="mem2" onchange="updateNextArray()">
        <?php
          $query = "select * from user";
          $query_result = query($query);
        while($row = fetch_array($query_result)) {
            echo "<option value='{$row['user_id']}'>{$row['user_id']} - {$row['name']}</option>";
        }
        ?>
      </select>
      <br><br>
      <select class="js-example-templating3" name="mem3" onchange="updateNextArray()">
        <?php
          $query = "select * from user";
          $query_result = query($query);
        while($row = fetch_array($query_result)) {
            echo "<option value='{$row['user_id']}'>{$row['user_id']} - {$row['name']}</option>";
        }
        ?>
      </select>
<script>
function updateNextArray(){
//update array here
}
function formatState (state) {
if (!state.id) {
return state.text;
}
var $state = $(
'<span>' + state.text + '</span>'
);
return $state;
};
$(".js-example-templating1").select2({
data: Array1,
templateResult: formatState
});
$(".js-example-templating2").select2({
data: Array2,
templateResult: formatState
});
$(".js-example-templating3").select2({
data: Array3,
templateResult: formatState
});
</script>

2.AJAX只要使用得当就可以工作。

$(".js-example-templating").select2({
    ajax: {
        url: '../../subjects.json', // or api endpoint which supplies the array
        dataType: 'json',
    });

【讨论】:

  • 如何动态分配Array给select2数据?
  • 在第一个下拉菜单中使用 onchange 事件。过滤数组。使用过滤后的数组初始化第二个下拉列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多