У меня есть функция, в которую я не могу добавить обратный вызов.
function ajaxCartFormSubmitted(e) {
someotherfunctionsinside();
if (e)...
});
function test () {
console.info('abraka');
}
я стараюсь делать
function ajaxCartFormSubmitted(e, callback) {
someotherfunctionsinside();
if (e)...
if (callback) {
callback();
}
});
а потом звоню
ajaxCartFormSubmitted(test);
Но я получаю Uncaught TypeError: обратный вызов не является функцией. В чем проблема? Я использую jquery 1.3 и не могу обновиться. Спасибо.
But I get Uncaught TypeError: callback is not a function. What is the problem?
Проблема в том, что вы не передали ajaxCartFormSubmitted
два аргумента, вы передали только один, который он получает как параметр e
(первый параметр). Когда вы это сделаете, параметр callback
будет undefined
.
Либо передайте ей два аргумента, либо измените функцию, чтобы она ожидала только один.
Что ожидает функция:
function ajaxCartFormSubmitted(e, callback) {
// First parameter --^ ^^^^^^^^--- second parameter
Что вы отправляете:
ajaxCartFormSubmitted(test);
// ^^^^------ First (only) argument
У вас есть две проблемы.
Есть два аргумента e
и callback
. Вы должны передать их оба, если хотите обратный вызов, поскольку это ваш второй аргумент.
Вот так: ajaxCartFormSubmitted(event, test)
Вы не можете передать только второй аргумент и пропустить первый. если вам нужно сделать это, напишите другую функцию.
если он вызывается как ajaxCartFormSubmitted(event, 'foo')
или ajaxCartFormSubmitted(event, true)
, то ни 'foo'
, ни true
не являются функциями. вам просто нужно убедиться, что тип callback
на самом деле является функцией, прежде чем запускать ее
function ajaxCartFormSubmitted(e, callback) {
someotherfunctionsinside();
if (e) {
...
}
if (callback && typeof callback === 'function') {
callback();
}
});
если это все еще не работает, добавьте туда console.info
, чтобы вы могли отладить его и посмотреть, что это такое.
console.info(typeof callback, callback)
ajaxCartFormSubmitted(e, test);
Просто передайте что-нибудь туда. если вы сделали функцию, вы должны знать, что там происходит. кажется, у него есть проверка на if (e) { ...
, поэтому, если вы хотите пропустить его, просто передайте undefined
вот так: ajaxCartFormSubmitted(undefined, test)
Спасибо за ответ. Я получаю undefined undefined в консоли. И проверка работоспособности не сработала. Однако ошибок нет. (e), вероятно, является событием - как я могу передать его в качестве первого аргумента?