单击 SelectAllOption 多选时未触发 onChange 事件
onChange event not triggered when while clicking on SelectAllOption multiselect
我使用 bootstrap multiselect
,根据 selected 选项获取数据。此过滤器数据将在 onChange
触发时起作用,但在尝试 select 时所有 onChange
不起作用:
function getOptions(node, isFilter) {
var isChanged = false;
return {
enableCaseInsensitiveFiltering: isFilter,
includeSelectAllOption: true,
filterPlaceholder: 'Search ...',
nonSelectedText: node,
numberDisplayed: 1,
buttonWidth: '100%',
maxHeight: 400,
onChange: function () {
alert('Changes');
isChanged = true;
},
onDropdownHide: function (event) {
if (isChanged) {
filterData(node);
isChanged = false;
}
}
}
}
$('#myselect').multiselect(getOptions('myselect', true));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css" />
<!-- Build your select: -->
<select id="myselect" multiple="multiple">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
<option value="4">Option 4</option>
<option value="5">Option 5</option>
<option value="6">Option 6</option>
</select>
Bootstrap multiselect 提供一个名为 "onSelectAll" 的函数。此函数将用于 select 所有选项。您需要将 onSelectAll 函数与 onChange 函数一起使用。
function getOptions(node, isFilter) {
var isChanged = false;
return {
enableCaseInsensitiveFiltering: isFilter,
includeSelectAllOption: true,
filterPlaceholder: 'Search ...',
nonSelectedText: node,
numberDisplayed: 1,
buttonWidth: '100%',
maxHeight: 400,
onChange: function () {
isChanged = true;
},
onSelectAll: function() {
isChanged = true;
},
onDropdownHide: function (event) {
if (isChanged) {
filterData(node);
isChanged = false;
}
}
}
}
$('#DDLCity').multiselect(getOptions('City', true));
Bootstrap multiselect为此提供了事件,那就是onSelectAll
。当您的 Select all
被选中时,您需要使用 onSelectAll
。这是您的代码中缺少的一段代码:
onSelectAll: function() {
alert("SELECT ALL");
isChanged = true;
},
下面是您的代码的更新工作版本:
function getOptions(node, isFilter) {
var isChanged = false;
return {
enableCaseInsensitiveFiltering: isFilter,
includeSelectAllOption: true,
filterPlaceholder: 'Search ...',
nonSelectedText: node,
numberDisplayed: 1,
buttonWidth: '100%',
maxHeight: 400,
onChange: function() {
alert('Changes');
isChanged = true;
},
onSelectAll: function() {
alert("SELECT ALL");
isChanged = true;
},
onDropdownHide: function(event) {
if (isChanged) {
filterData(node);
isChanged = false;
}
}
}
}
$('#myselect').multiselect(getOptions('myselect', true));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css" />
<!-- Build your select: -->
<select id="myselect" multiple="multiple">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
<option value="4">Option 4</option>
<option value="5">Option 5</option>
<option value="6">Option 6</option>
</select>
我使用 bootstrap multiselect
,根据 selected 选项获取数据。此过滤器数据将在 onChange
触发时起作用,但在尝试 select 时所有 onChange
不起作用:
function getOptions(node, isFilter) {
var isChanged = false;
return {
enableCaseInsensitiveFiltering: isFilter,
includeSelectAllOption: true,
filterPlaceholder: 'Search ...',
nonSelectedText: node,
numberDisplayed: 1,
buttonWidth: '100%',
maxHeight: 400,
onChange: function () {
alert('Changes');
isChanged = true;
},
onDropdownHide: function (event) {
if (isChanged) {
filterData(node);
isChanged = false;
}
}
}
}
$('#myselect').multiselect(getOptions('myselect', true));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css" />
<!-- Build your select: -->
<select id="myselect" multiple="multiple">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
<option value="4">Option 4</option>
<option value="5">Option 5</option>
<option value="6">Option 6</option>
</select>
Bootstrap multiselect 提供一个名为 "onSelectAll" 的函数。此函数将用于 select 所有选项。您需要将 onSelectAll 函数与 onChange 函数一起使用。
function getOptions(node, isFilter) {
var isChanged = false;
return {
enableCaseInsensitiveFiltering: isFilter,
includeSelectAllOption: true,
filterPlaceholder: 'Search ...',
nonSelectedText: node,
numberDisplayed: 1,
buttonWidth: '100%',
maxHeight: 400,
onChange: function () {
isChanged = true;
},
onSelectAll: function() {
isChanged = true;
},
onDropdownHide: function (event) {
if (isChanged) {
filterData(node);
isChanged = false;
}
}
}
}
$('#DDLCity').multiselect(getOptions('City', true));
Bootstrap multiselect为此提供了事件,那就是onSelectAll
。当您的 Select all
被选中时,您需要使用 onSelectAll
。这是您的代码中缺少的一段代码:
onSelectAll: function() {
alert("SELECT ALL");
isChanged = true;
},
下面是您的代码的更新工作版本:
function getOptions(node, isFilter) {
var isChanged = false;
return {
enableCaseInsensitiveFiltering: isFilter,
includeSelectAllOption: true,
filterPlaceholder: 'Search ...',
nonSelectedText: node,
numberDisplayed: 1,
buttonWidth: '100%',
maxHeight: 400,
onChange: function() {
alert('Changes');
isChanged = true;
},
onSelectAll: function() {
alert("SELECT ALL");
isChanged = true;
},
onDropdownHide: function(event) {
if (isChanged) {
filterData(node);
isChanged = false;
}
}
}
}
$('#myselect').multiselect(getOptions('myselect', true));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css" />
<!-- Build your select: -->
<select id="myselect" multiple="multiple">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
<option value="4">Option 4</option>
<option value="5">Option 5</option>
<option value="6">Option 6</option>
</select>