【问题标题】:setTimeout giving a 'result of expression is not a function' errorsetTimeout 给出“表达式的结果不是函数”错误
【发布时间】:2011-03-06 16:54:13
【问题描述】:

我有一个 setTimeout 调用:

if ($cardOne instanceof jQuery){

    setTimeout(function() {
        resetCard($cardOne);
    }, 1000);

    $cardOne = "";
}

调用这个函数:

function resetCard($card){
  $card.removeClass('show');
}

这会导致这个错误:

表达式 '$card.removeClass' [undefined] 的结果不是函数。

我不确定这意味着什么。 setTimeOut 是否想要某种返回值?我已经验证 $card 确实是一个 jQuery 对象(在本例中是一个 DIV)。

更新:

我在上面添加了更多示例代码来指出我做错了什么。 Pointy 让我意识到,当调用 removeClass 时,问题在于 $card 不是 jQuery 对象。

如果您查看我的示例代码,事后看来我做错了什么现在很明显......我在 setTimeout 内调用该函数,然后立即将 $cardOne var 设置回空字符串。因此,到 setTimeout 调用该函数时,var 已被重置,不再是 jQuery 对象。

修复方法是将对象的设置移动到一个空字符串到 resetCard 函数中。

【问题讨论】:

  • 确定它是一个 jQuery 对象,而不仅仅是对 <div> DOM 元素的引用吗?
  • 你有没有试过在resetCard中显示$card的值,它显示什么?
  • 在 resetCard 函数中尝试console.dir($card);
  • @DA 如果它是一个 jQuery 对象,那么就会有一个“removeClass”函数...
  • @DA 确定它是否是 jQuery 实例对象的最简单方法是 console.dir() 它。然后你可以打开你的控制台并检查记录的对象是否包含the properties of a jQuery instance object

标签: javascript jquery settimeout


【解决方案1】:

如果你改变“resetCard”会发生什么:

function resetCard($card) {
  $($card).removeClass('show');
}

该错误表示“$card”参数引用的对象上没有“removeClass”属性。

【讨论】:

  • 不是确切的答案,但你让我重新思考我的逻辑,你是对的......当它被传递给函数时,它不是一个 jQuery 对象。我会更新我的问题,以明确我做错了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2021-10-03
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多