У меня есть функция, в которую я не могу добавить обратный вызов.

function ajaxCartFormSubmitted(e) {
  someotherfunctionsinside();
  if (e)...
});

function test () {
    console.log('abraka');

}

Я пытаюсь сделать

function ajaxCartFormSubmitted(e, callback) {
  someotherfunctionsinside();
  if (e)...
  if (callback) {
    callback();
  }
});

А потом звонит

ajaxCartFormSubmitted(test);

Но я получаю Uncaught TypeError: обратный вызов не является функцией. В чем проблема? Я использую jquery 1.3 и не могу обновить. Спасибо.

0
user1031742 28 Май 2019 в 20:08

2 ответа

Лучший ответ

У вас две проблемы.

1

Есть два аргумента e и callback. Вы должны передать их оба, если хотите обратный вызов, так как это ваш второй аргумент.

Вот так: ajaxCartFormSubmitted(event, test)

Вы не можете только передать второй аргумент и пропустить первый. если вам нужно сделать это, напишите другую функцию.

2

Если он вызывается как ajaxCartFormSubmitted(event, 'foo') или ajaxCartFormSubmitted(event, true), то ни 'foo', ни true не являются функциями. вам просто нужно проверить, что тип callback на самом деле является функцией, прежде чем запускать ее

function ajaxCartFormSubmitted(e, callback) {
  someotherfunctionsinside();
  if (e) {
    ...
  }
  if (callback && typeof callback === 'function') {
    callback();
  }
});

Если это все еще не работает, добавьте console.log туда, чтобы вы могли отладить его и посмотреть, что это такое.

console.log(typeof callback, callback)

0
CBarr 28 Май 2019 в 17:13

Но я получаю Uncaught TypeError: обратный вызов не является функцией. В чем проблема?

Проблема в том, что вы не передали ajaxCartFormSubmitted два аргумента, вы передали только один, который он получает как параметр e (первый параметр). Параметр callback будет undefined, когда вы это сделаете.

Либо передайте ему два аргумента, либо измените функцию, чтобы она ожидала только одного.

Что ожидает функция:

function ajaxCartFormSubmitted(e, callback) {
//           First parameter --^  ^^^^^^^^--- second parameter

Что вы отправляете это:

ajaxCartFormSubmitted(test);
//                    ^^^^------ First (only) argument
1
T.J. Crowder 28 Май 2019 в 17:12
56347115