所以我有一对<select>
框,并有一个jQuery脚本将选定的<option>
从一个选择框传输到另一个选择框。我也有相反的功能。这种方式很好,除非我将<option>
“放回”第一个<select>
,它们会被添加到底部,而不是像以前那样按字母顺序排列。
所以我发现这个功能由this question提供:
function sortSelect() {
var options = $('#inactiveTickers option');
var arr = options.map(function(_, o) {
return {
t: $(o).text(),
v: o.value
};
}).get();
arr.sort(function(o1, o2) {
return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0;
});
options.each(function(i, o) {
console.log(i);
o.value = arr[i].v;
$(o).text(arr[i].t);
});
}
然后我有这个jQuery捕获标识为#remove
的链接上的点击事件:
$('#remove').click(function() {
return !$('#activeTickers option:selected').remove().appendTo('#inactiveTickers');
sortSelect();
});
因此,函数中的第一行执行<option>
标记的移动,第二行应调用sortSelect
函数。
问题是我不认为正在调用sortSelect
函数(控制台日志中没有任何内容,函数应该写入它)。我的代码出了什么问题?
答案 0 :(得分:2)
这是因为您在调用sortSelect
之前已经返回了一些值,函数调用在return
行结束。只是不要返回任何内容或将值放入变量中,并在调用sortSelect
后返回它。
$('#remove').click(function() {
var ret = !$('#activeTickers option:selected').remove().appendTo('#inactiveTickers');
sortSelect();
return ret;
});
答案 1 :(得分:1)
当您使用它们时,功能会停止。我不明白你为什么要使用返回来做那些事情,考虑到appendTo()
没有返回任何东西(顺便说一句,你不需要return
任何东西)。只是做
$('#remove').click(function() {
$('#activeTickers option:selected').remove().appendTo('#inactiveTickers');
sortSelect();
});