【问题标题】:Calling a function in a jQuery event is not working在 jQuery 事件中调用函数不起作用
【发布时间】:2013-05-05 00:38:45
【问题描述】:

所以我有一对<select> 框和一个jQuery 脚本来将选定的<option>s 从一个选择框传输到另一个选择框。我也有一个相反的功能。这很好用,除非我将<option>s“放回”第一个<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,它在 ID 为 #remove 的链接上捕获点击事件:

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

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

【问题讨论】:

  • 你在第一行有return,执行到这里结束......
  • 另外,你的 sortSelect 函数只排序 select#inactiveTickers - 你可能也想把它作为一个参数..
  • @techfoobar 是的,我会把它作为一个论据,只是想让它首先工作。谢谢

标签: javascript jquery


【解决方案1】:

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

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

【讨论】:

  • 谢谢,您的方法可能有效,但正如@steo 所说,第一行没有返回任何内容,所以最好直接调用它而不返回。
【解决方案2】:

函数在你使用时停止返回。考虑到appendTo() 不返回任何东西(顺便说一句,你不需要return 任何东西),我不明白你为什么要使用return 来做这些事情。做吧

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

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 2012-08-23
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多