得到像“不是函数”的jquery错误?

时间:2013-02-22 10:30:10

标签: javascript jquery

执行下面的代码时,我收到一条JavaScript错误$tabAcc.removeClass is not a function。可能是什么问题?

var $tabAcc = '',
    $tabtoShow = '',
    $tabSelectAcc = '',
    $tabtoShowSelected = '',
    $tabSelectAcc = '',
    $tabBilling = '',
    $tabtoShowBilling = '',
    $tabSelectBilling = '',
    $tabtoShowBillingSelected = '';
$(".tabAcc").mouseover(function () {
    $tabAcc = $(".tabAcc");
    $tabtoShow = $tabAcc.children('.tabListMenu');
    $tabAcc.removeClass('tabAcc').addClass('tabHoverAcc');
    $tabtoShow.show();
}).mouseout(function () {
    $tabAcc.removeClass('tabHoverAcc').addClass('tabAcc');
    $tabtoShow.hide();
});

2 个答案:

答案 0 :(得分:1)

你有很多乱码。

  1. 确保您拥有jquery库。
  2. 将您的元素包装在jquery对象中以使用jquery库

    $($tabAcc).removeClass("classname");
    

答案 1 :(得分:0)

如果mouseout事件始终跟在mouseover事件之后,那么你会没事的,因为$tabAcc实际上会引用一个jQuery对象。如果您在mouseout事件之前收到mouseover事件,则会出现问题,因为那时您的$tabAcc变量只是一个空字符串。

JavaScript对象中的String类没有removeClass函数,因此您将收到错误消息。假设您没有动态地向页面添加.tabAcc元素,您可以将代码修改为如下所示:

var $tabAcc = $('.tabAcc'),
    $tabtoShow,
    $tabSelectAcc,
    $tabtoShowSelected,
    $tabSelectAcc,
    $tabBilling,
    $tabtoShowBilling,
    $tabSelectBilling,
    $tabtoShowBillingSelected;
$tabAcc.mouseover(function () {
    $tabtoShow = $tabAcc.children('.tabListMenu');
    $tabAcc.removeClass('tabAcc').addClass('tabHoverAcc');
    $tabtoShow.show();
}).mouseout(function () {
    $tabAcc.removeClass('tabHoverAcc').addClass('tabAcc');
    $tabtoShow.hide();
});

这样你就可以缓存$('.tabAcc')的结果(一个小的性能提升,因为你只调用一次),你可以确定$tabAcc变量将引用一个jQuery对象,因此在事件处理函数中有removeClass函数。