在jQuery事件中调用函数不起作用

时间:2013-05-10 10:36:48

标签: javascript jquery

所以我有一对<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函数(控制台日志中没有任何内容,函数应该写入它)。我的代码出了什么问题?

2 个答案:

答案 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();
});