0

所以我有一对<select>框,并有一个 jQuery 脚本将选定<option>的 s 从一个选择框传输到另一个选择框。我也有一个相反的功能。这很好用,除非当我将 s “放回”<option>到第一个<select>时,它们被附加到底部,而不是像以前那样按字母顺序。

所以我发现这个功能是由这个问题提供的:

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,它捕获带有 id 的链接上的点击事件#remove

$('#remove').click(function() {  
    return !$('#activeTickers option:selected').remove().appendTo('#inactiveTickers');  
    sortSelect();
  }); 

所以函数中的第一行是移动<option>标签,第二行应该调用sortSelect函数。问题是我认为没有sortSelect调用该函数(控制台日志中没有任何内容,该函数应该写入它)。我的代码有什么问题?

4

2 回答 2

2

这是因为你在调用之前已经返回了一些值sortSelect,函数调用在return. 只是不要返回任何东西或将值放入变量中,然后在调用后返回它sortSelect

$('#remove').click(function() {  
    var ret = !$('#activeTickers option:selected').remove().appendTo('#inactiveTickers');  
    sortSelect();
    return ret;
}); 
于 2013-05-10T10:41:55.383 回答
1

当您使用它们时,函数会停止 return 。我不明白你为什么要使用 return 来做那些事情,考虑到appendTo()它不会返回任何东西(顺便说一句,你不需要return任何东西)。做就是了

$('#remove').click(function() {  
$('#activeTickers option:selected').remove().appendTo('#inactiveTickers');  
sortSelect();
}); 
于 2013-05-10T10:43:05.170 回答