语义 UI 下拉 multi-select 删除刷新值
Semantic UI dropdown multi-select removes value on refresh
我正在使用 ajax
在 div#demo
中绑定部分视图并在 ajaxstop
上启动 dropdown
。
提交详细信息后,ajax 再次加载部分视图以刷新 table 部分,然后在 ajaxstop
上重新启动 dropdown
。
这适用于单个 selection 下拉列表,但多个 select 下拉列表会重置 selected 值。
我不希望多 select 下拉菜单重置它的值。
// partial views
var viewA = `
<select class="ui dropdown">
<option value="">Select Single Car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<select class="ui dropdown" Multiple>
<option value="">Select Multiple Car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<button type="button" class="ui button primary">Submit</button>
`
var viewB = `<table class="ui celled table unstackable">
<thead>
<tr><th>Name</th>
<th>Age</th>
<th>Job</th>
</tr></thead>
<tbody>
<tr>
<td data-label="Name">James</td>
<td data-label="Age">24</td>
<td data-label="Job">Engineer</td>
</tr>
<tr>
<td data-label="Name">Jill</td>
<td data-label="Age">26</td>
<td data-label="Job">Engineer</td>
</tr>
<tr>
<td data-label="Name">Elyse</td>
<td data-label="Age">24</td>
<td data-label="Job">Designer</td>
</tr>
</tbody>
</table>`
$(document).ajaxStop(function() {
$(".dropdown").dropdown({
useLabels: false,
});
});
function bindViewA() {
$.ajax({
url: "https://jsonplaceholder.typicode.com/todos/1"
});
$("#viewA").html(viewA);
}
function bindViewB() {
$.ajax({
url: "https://jsonplaceholder.typicode.com/todos/1"
});
$("#viewB").html(viewB);
}
$(document).on('click', 'button', () => {
bindViewB();
});
bindViewA();
bindViewB();
#demo {
padding: 30px;
}
#viewA {
margin-bottom: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
<div id="demo">
<div id="viewA"></div>
<div id="viewB"></div>
</div>
重现步骤。
- Select 两个下拉菜单中的项目
- 单击“提交”按钮重新加载详细信息部分
我没有在 semantic
中找到 dropdown
函数的预期行为。但是,您可以在 ajaxStop
函数上打个小补丁:
$(document).ajaxStop(function() {
var psel = [];
$(".dropdown [multiple]").each(function(){
psel.push($(this).val());
});
$(".dropdown").dropdown({
useLabels: false
});
$(".dropdown [multiple]").each(function(){
$(this).val(psel[0]).trigger('change');
psel.shift();
});
});
即使有多个下拉菜单,只要 jquery 始终以相同的顺序选择它们,这也应该有效。如果没有,您总是可以使 psel
成为一个散列,并为每个多重选择器提供一个 id
.
您可以在不使用 initialize
的情况下使用 setting
设置下拉菜单,如下所示
$(".dropdown").dropdown('setting', {
useLabels: false,`
})'
// partial views
var viewA = `
<select class="ui dropdown">
<option value="">Select Single Car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<select class="ui dropdown" Multiple>
<option value="">Select Multiple Car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<button type="button" class="ui button primary">Submit</button>
`
var viewB = `<table class="ui celled table unstackable">
<thead>
<tr><th>Name</th>
<th>Age</th>
<th>Job</th>
</tr></thead>
<tbody>
<tr>
<td data-label="Name">James</td>
<td data-label="Age">24</td>
<td data-label="Job">Engineer</td>
</tr>
<tr>
<td data-label="Name">Jill</td>
<td data-label="Age">26</td>
<td data-label="Job">Engineer</td>
</tr>
<tr>
<td data-label="Name">Elyse</td>
<td data-label="Age">24</td>
<td data-label="Job">Designer</td>
</tr>
</tbody>
</table>`
$(document).ajaxStop(function() {
$(".dropdown").dropdown('setting', {
useLabels: false,
forceSelection: false,
sortSelect: true,
//clearable: true,
fullTextSearch: true,
onHide: function() {
//cleanDdlOnHide(this);
}
});
});
function bindViewA() {
$.ajax({
url: "https://jsonplaceholder.typicode.com/todos/1"
});
$("#viewA").html(viewA);
}
function bindViewB() {
$.ajax({
url: "https://jsonplaceholder.typicode.com/todos/1"
});
$("#viewB").html(viewB);
}
$(document).on('click', 'button', () => {
bindViewB();
});
bindViewA();
bindViewB();
#demo {
padding: 30px;
}
#viewA {
margin-bottom: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
<div id="demo">
<div id="viewA"></div>
<div id="viewB"></div>
</div>
这似乎已在社区分支中修复 https://fomantic-ui.com
所以尝试相应地更改 css + js
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fomantic-ui@2.8.3/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/fomantic-ui@2.8.3/dist/semantic.min.js"></script>
我在此处使用您的代码准备了一个可用的 jsfiddle https://jsfiddle.net/sezL041k/
我正在使用 ajax
在 div#demo
中绑定部分视图并在 ajaxstop
上启动 dropdown
。
提交详细信息后,ajax 再次加载部分视图以刷新 table 部分,然后在 ajaxstop
上重新启动 dropdown
。
这适用于单个 selection 下拉列表,但多个 select 下拉列表会重置 selected 值。
我不希望多 select 下拉菜单重置它的值。
// partial views
var viewA = `
<select class="ui dropdown">
<option value="">Select Single Car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<select class="ui dropdown" Multiple>
<option value="">Select Multiple Car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<button type="button" class="ui button primary">Submit</button>
`
var viewB = `<table class="ui celled table unstackable">
<thead>
<tr><th>Name</th>
<th>Age</th>
<th>Job</th>
</tr></thead>
<tbody>
<tr>
<td data-label="Name">James</td>
<td data-label="Age">24</td>
<td data-label="Job">Engineer</td>
</tr>
<tr>
<td data-label="Name">Jill</td>
<td data-label="Age">26</td>
<td data-label="Job">Engineer</td>
</tr>
<tr>
<td data-label="Name">Elyse</td>
<td data-label="Age">24</td>
<td data-label="Job">Designer</td>
</tr>
</tbody>
</table>`
$(document).ajaxStop(function() {
$(".dropdown").dropdown({
useLabels: false,
});
});
function bindViewA() {
$.ajax({
url: "https://jsonplaceholder.typicode.com/todos/1"
});
$("#viewA").html(viewA);
}
function bindViewB() {
$.ajax({
url: "https://jsonplaceholder.typicode.com/todos/1"
});
$("#viewB").html(viewB);
}
$(document).on('click', 'button', () => {
bindViewB();
});
bindViewA();
bindViewB();
#demo {
padding: 30px;
}
#viewA {
margin-bottom: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
<div id="demo">
<div id="viewA"></div>
<div id="viewB"></div>
</div>
重现步骤。
- Select 两个下拉菜单中的项目
- 单击“提交”按钮重新加载详细信息部分
我没有在 semantic
中找到 dropdown
函数的预期行为。但是,您可以在 ajaxStop
函数上打个小补丁:
$(document).ajaxStop(function() {
var psel = [];
$(".dropdown [multiple]").each(function(){
psel.push($(this).val());
});
$(".dropdown").dropdown({
useLabels: false
});
$(".dropdown [multiple]").each(function(){
$(this).val(psel[0]).trigger('change');
psel.shift();
});
});
即使有多个下拉菜单,只要 jquery 始终以相同的顺序选择它们,这也应该有效。如果没有,您总是可以使 psel
成为一个散列,并为每个多重选择器提供一个 id
.
您可以在不使用 initialize
的情况下使用 setting
设置下拉菜单,如下所示
$(".dropdown").dropdown('setting', {
useLabels: false,`
})'
// partial views
var viewA = `
<select class="ui dropdown">
<option value="">Select Single Car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<select class="ui dropdown" Multiple>
<option value="">Select Multiple Car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<button type="button" class="ui button primary">Submit</button>
`
var viewB = `<table class="ui celled table unstackable">
<thead>
<tr><th>Name</th>
<th>Age</th>
<th>Job</th>
</tr></thead>
<tbody>
<tr>
<td data-label="Name">James</td>
<td data-label="Age">24</td>
<td data-label="Job">Engineer</td>
</tr>
<tr>
<td data-label="Name">Jill</td>
<td data-label="Age">26</td>
<td data-label="Job">Engineer</td>
</tr>
<tr>
<td data-label="Name">Elyse</td>
<td data-label="Age">24</td>
<td data-label="Job">Designer</td>
</tr>
</tbody>
</table>`
$(document).ajaxStop(function() {
$(".dropdown").dropdown('setting', {
useLabels: false,
forceSelection: false,
sortSelect: true,
//clearable: true,
fullTextSearch: true,
onHide: function() {
//cleanDdlOnHide(this);
}
});
});
function bindViewA() {
$.ajax({
url: "https://jsonplaceholder.typicode.com/todos/1"
});
$("#viewA").html(viewA);
}
function bindViewB() {
$.ajax({
url: "https://jsonplaceholder.typicode.com/todos/1"
});
$("#viewB").html(viewB);
}
$(document).on('click', 'button', () => {
bindViewB();
});
bindViewA();
bindViewB();
#demo {
padding: 30px;
}
#viewA {
margin-bottom: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
<div id="demo">
<div id="viewA"></div>
<div id="viewB"></div>
</div>
这似乎已在社区分支中修复 https://fomantic-ui.com
所以尝试相应地更改 css + js
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fomantic-ui@2.8.3/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/fomantic-ui@2.8.3/dist/semantic.min.js"></script>
我在此处使用您的代码准备了一个可用的 jsfiddle https://jsfiddle.net/sezL041k/