jquery - select2 使用 jquery 删除选择
问题描述
我有一个带有 html 的选择 2 框:
<div class="col-md-9">
<select class="form-control select2" style="width: 100%;" id="project_status" name="project_status" data-placeholder="Select a project status">
<option value="" ></option>
<option value="Pipeline" selected>Pipeline</option>
<option value="Started">Started</option>
<option value="Closed">Closed</option>
</select>
</div>
我有这样的JS:
$("#project_status").select2({
allowClear: true
});
我想清除此字段,以防我在另一个框中选择一个选项,如下所示:
$('#project_type').change(function() {
project_type_value_check();
});
function project_type_value_check() {
project_type_val = $("#project_type option:selected").val();
if (project_type_val == "Pre-sales")
{
$('#project_status').val(null).trigger('change');
}
}
但奇怪的是,这样做时,我的行为非常奇怪。第一次加载页面时,会调用函数 project_type_value_check() 并很好地清除值。但是,如果我将框项目类型更改为项目,然后将项目状态设置为已启动,然后如果我尝试再次将项目类型设置为预售,则会出现错误:
Uncaught RangeError: Maximum call stack size exceeded
at String.replace (<anonymous>)
at Function.fa [as find] (jquery.min.js:2)
at n.fn.init.find (jquery.min.js:2)
at new n.fn.init (jquery.min.js:2)
at n (jquery.min.js:2)
at project_type_value_check (2019:4581)
at HTMLSelectElement.<anonymous> (2019:4626)
at HTMLSelectElement.dispatch (jquery.min.js:3)
at HTMLSelectElement.r.handle (jquery.min.js:3)
at Object.trigger
解决方案
我猜将选择框设置为 null 会导致问题,将其更改为empty
.
$('#project_status').val(null).trigger('change');
至
$('#project_status').val('');
$('#project_status').select2().trigger('change');
$("#project_status").select2({
allowClear: true
});
$('#project_type').change(function() {
project_type_value_check();
});
function project_type_value_check() {
project_type_val = $("#project_type option:selected").val();
if (project_type_val == "Pre-sales")
{
$('#project_status').val('');
$('#project_status').select2().trigger('change');
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- Select2 CSS -->
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.css">
<!-- Select2 JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/js/select2.min.js" type="text/javascript"></script>
<div class="col-md-9">
<select class="form-control select2" style="width: 100%;" id="project_status" name="project_status" data-placeholder="Select a project status">
<option value="" >--select--</option>
<option value="Pipeline" selected>Pipeline</option>
<option value="Started">Started</option>
<option value="Closed">Closed</option>
</select>
</div>
<select id="project_type">
<option value=""></option>
<option value="Pre-sales">Pre-sales</option>
</select>
推荐阅读
- javascript - 将图像内的坐标转换为图形
- python - 从视频流中执行接近实时的人员检测的问题
- javascript - Mobx 可观察映射到 js 数组
- ssis - SSIS foeach 容器正在跳过子文件夹
- hyperledger-fabric - 是否可以在 Hyperledger 中定义对查询的访问控制?
- apache - htaccess阿帕奇。如何允许通过 ip 访问管理员的 url?
- r - `_bookdown.yml`、`_output.yml` 和第一个文档的 yaml 标头有什么区别?
- excel - 基于多列删除表中的重复项
- python - Python在多列中返回第一个非零值
- java - 将一个对象复制到另一个对象中,更改某些字段的数据类型