Да, я проверил другие вопросы, касающиеся одной и той же проблемы, но ни одна из них не соответствует моей конкретной проблеме, поэтому я надеюсь, что кто-то может помочь мне здесь.
Итак, у меня есть кнопка:
<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);
};
EDIT: Часть, которая была здесь, не была моим кодом и, похоже, вызывала некоторую путаницу и тратила время на то, чтобы понять это.
Функция создает новую область, поэтому внутри
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
не то, что вы думаете, и это, безусловно, не имеет свойства value, и именно это вызывает ошибку, см. Fiddle.
Если вы будете использовать обработчики событий jQuery, область будет установлена для вас
$('.operator').on('click', operators);
то this
внутри функции будет связанным элементом.
РЕДАКТИРОВАТЬ:
Если функция вызывается внутри обработчика события, вы можете сделать
$(".operator").click(function () {
operators.apply(this, [CurVal]);
});
apply()
метод вызывает функцию с заданной this
значение и аргументы при условии как массив (или массив типа объекта).
Синтаксис apply()
почти идентичен синтаксису call()
, основное отличие заключается в том, что call()
принимает список аргументов, а apply()
принимает один массив аргументов.
вы не можете вызвать $(this)
внутри вызова функции. Я уверен, что это проблема определения...
for $(this)
для работы, либо использовать обработчик события jquery click или передать это функции 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 );
}
elem
?