是的,我已经检查了有关同一问题的其他问题,但没有一个问题符合我的具体问题,所以我希望有人可以帮助我。
所以,我有一个按钮:
<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);
};
编辑:这里的部分不是我的代码,似乎引起了一些混乱,浪费你的时间试图解决它。
答案 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
}
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 );
}