Uncaught TypeError: Невозможно вызвать метод toLowerCase из неопределенного

0

Да, я проверил другие вопросы, касающиеся одной и той же проблемы, но ни одна из них не соответствует моей конкретной проблеме, поэтому я надеюсь, что кто-то может помочь мне здесь.

Итак, у меня есть кнопка:

<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: Часть, которая была здесь, не была моим кодом и, похоже, вызывала некоторую путаницу и тратила время на то, чтобы понять это.

  • 0
    откуда берется эта переменная elem ?
  • 0
    вы пробовали это с любым другим значением, кроме слэша? они имеют тенденцию вызывать проблемы иногда при использовании в качестве строк
Показать ещё 3 комментария
Теги:
typeerror

2 ответа

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 не то, что вы думаете, и это, безусловно, не имеет свойства value, и именно это вызывает ошибку, см. Fiddle.

Если вы будете использовать обработчики событий jQuery, область будет установлена для вас

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

то this внутри функции будет связанным элементом.

РЕДАКТИРОВАТЬ:

Если функция вызывается внутри обработчика события, вы можете сделать

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

apply() метод вызывает функцию с заданной this значение и аргументы при условии как массив (или массив типа объекта).

Синтаксис apply() почти идентичен синтаксису call(), основное отличие заключается в том, что call() принимает список аргументов, а apply() принимает один массив аргументов.

Подробнее о MDN

  • 0
    Я заблудился. Разве это не относится к кнопке, на которую нажали? $ (". operator"). click (function () {operator (CurVal)}); это как это называется
  • 0
    Нет, при вызове таким способом область действия не устанавливается, тогда вам также нужно будет передать элемент.
Показать ещё 4 комментария
0

вы не можете вызвать $(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 ); 
}
  • 0
    OP может также проксифицировать контекст при вызове функции, используя jquery-метод $ .proxy () или bind () или call () или apply () в javascript
  • 0
    Что такое проксирование контента? И, Бипен, я использую это несколько раз в моем коде, и это никогда не дает ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню