【问题标题】:Function becomes undefined after first trigger第一次触发后函数变得未定义
【发布时间】:2012-08-21 12:24:53
【问题描述】:

我有这样一段代码:

function doSomething() {
    someVar.on("event_name", function() {
        $('#elementId').click(function(e) {
            doSomething();
        });
    });
}

// and on document ready
 $(function () {
    $('#anotherElemId').click(function () {
        doSomething();
    });
});

我遇到的问题是,当我从anotherElemId click 事件(绑定在准备好的文档上)调用doSomething() 时,它按预期工作,但是从elementId 递归调用它点击不起作用.

有什么想法吗?思考是我所缺少的微不足道的东西。

【问题讨论】:

  • ('#elementId').click(function(e) { 必须是$('#elementId').click(function(e) {
  • 同时运行 doSomething 将在 firebug 中显示返回值,因为您没有返回任何内容,它应该显示未定义,请尝试 return 'didSomethig';
  • 您确定您没有将doSomething 名称用于其他用途吗?
  • 为什么要递归地将事件处理程序添加到同一个元素?这看起来不对……无论如何,您应该提供一个更完整的示例,如jsfiddle.net 演示。我敢肯定还有比你展示的更多的事情发生。
  • @GabrielSantos 在我的问题中输入错误。固定。

标签: javascript jquery recursion scope


【解决方案1】:

someVar 是对 dom 元素的实际 jQuery 引用吗? (例如 $('#someitem'))

第二个问题是您不能将 .click 事件放在您希望稍后实例化的函数中。如果您试图只允许 #elementId 在之前的某个事件之后发生点击事件,请尝试测试测试器变量是否为真:

var activated = false;

$(function () {
    $('#anotherElemId').click(function () {
        activated = true;
    });

    $('#secondElemId').on("event_name", function() {
        if (activated) {
            // code that happens only after #anotherElemId was clicked.
        }

    });
});

【讨论】:

  • someVar 不是 dom 元素。请参阅我的评论以及指向 pastebin 的链接。当我的控制台日志语句正在执行时,点击事件被触发。同时,我已将其更改为在 setupSocket() 函数之外有 2 个链接单独的连接/断开连接 ID 和事件。似乎一切都被触发了,但是在第二次连接时,断开连接后,我的服务器拒绝连接。非常感谢您帮助我们解决这个问题。
  • 还有一个更新。我试图用 socket.connect() 重新创建连接,但我应该使用相同的对象并按照stackoverflow.com/questions/9598900/… 调用 socket.socket.disconnect()。所以真正的问题与我的问题无关,我的调试应该更彻底。
猜你喜欢
  • 2014-04-25
  • 2015-08-19
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 2020-09-30
  • 1970-01-01
相关资源
最近更新 更多