未捕获的TypeError:无法调用未定义的方法'toLowerCase'

时间:2013-12-16 18:10:54

标签: javascript jquery typeerror

是的,我已经检查了有关同一问题的其他问题,但没有一个问题符合我的具体问题,所以我希望有人可以帮助我。

所以,我有一个按钮:

<input type="button" class="operator" value="/" />

当我点击它时,我收到标题中提到的错误。它调用的函数:

function operators(origVal) {
                var Oper = "";
                Oper = ($(this).val());
                console.log(Oper, origVal);       
            };

origVal只是我调用函数时传递的数字。

所以是的,当我将功能减少到

时,一切都很完美
function operators(origVal) {
                var Oper = "";
                console.log(Oper,origVal);       
            };
编辑:这里的部分不是我的代码,似乎引起了一些混乱,浪费你的时间试图解决它。

2 个答案:

答案 0 :(得分:3)

一个函数创建一个新的范围,所以在

function operators(origVal) {
    console.log(this); // returns the scope of the function

    // "this" is the function, or more likely the window in this case, 
    // and it has no val() method
}

FIDDLE

this不是你认为的那样,它肯定没有值属性,这就是导致错误的原因,请参阅小提琴。

如果您在哪里使用jQuery事件处理程序,将为您设置范围

$('.operator').on('click', operators);

然后函数内的this将成为绑定元素。

修改

如果在事件处理程序中调用该函数,则可以执行

$(".operator").click(function () { 
    operators.apply(this, [CurVal]);
});

apply()方法调用具有给定this值的函数,并将参数作为数组(或类数组对象)提供。

apply()的语法几乎与call()的语法相同,根本区别在于call()接受参数列表,而apply()接受单个参数数组

<强> More on MDN

答案 1 :(得分:0)

你不能在函数调用中调用$(this) ..我确定这是一个范围问题......

$(this)工作,要么使用jquery的点击事件处理程序,要么将其传递给函数onclick call

因为你还没有向我们展示过,你是如何调用运算符函数的......假设你正是这样做的。

  ... onclick="operators(this,somevalue)"..


 function operators(this,origVal)
  {
      var Oper = "";
      Oper = ($(this).val());
      console.log(Oper, origVal); 

  }

<强>更新

使用call()apply()在此处指定this上下文按钮,而不是自行运行

$(".operator").click(function () {
   operators.call( this, CurVal ); 
}