#javascript #jquery #parameter-passing
Вопрос:
Всем доброго дня,
Мне нужна помощь в разгадывании этой головоломки jquery. потратил довольно много времени, пытаясь заставить это работать, но безуспешно. мне нужно иметь возможность передавать параметры в мою пользовательскую функцию, чтобы они не были постоянными и могли быть перезаписаны. в настоящее время он сохранит первый переданный набор параметров, даже если я передам новые или ничего.
вот код пользовательской функции, которую я прикрепил к $
$(document).ready(() => {
$.addImage = function addImage(params) {
'use strinct';
const ops = params || undefined;
let cropper;
let avatar = document.getElementById('Avatar');
console.log(ops);
// 1st call is $.addImage({ isKey1: 'yes' }) => { isKey1: 'yes' } (good)
// 2nd call $.addImage() => { isKey1: 'yes' } nope should be undefined
// 1st call is $.addImage() => undefined (good)
// 2nd call $.addImage({ isKey1: 'yes' }) => undefined (nope should be the object)
// we are in certification mode, change the image sources
if (ops amp;amp; ops.isKey1 === 'yes') {
avatar = document.getElementById(rowImgID);
}
// eslint-disable-next-line prefer-arrow-callback
document.getElementById('imgSave').addEventListener('click', function () {
let canvas;
if (cropper) {
// eslint-disable-next-line prefer-arrow-callback
canvas.toBlob(function (blob) {
let url;
console.log(ops);
// 1st call is $.addImage({ isKey1: 'yes' }) => { isKey1: 'yes' } good
// 2nd call $.addImage() => { isKey1: 'yes' } nope should be undefined or null
// 1st call is $.addImage() => undefined (good)
// 2nd call $.addImage({ isKey1: 'yes' }) => undefined (nope should be the object)
if (ops amp;amp; ops.isKey1 === 'yes') {
url = 'url1';
} else {
url = 'url2';
}
console.log('url:', url);
// $.ajax({
// // here send blob
// // send other values
// blob,
// .....
// .....
// })
});
}
});
};
});
и когда я пытаюсь вызвать функцию дважды, например
первый звонок без параметров, как это
$('#btnAddAvatar').on('click', (e) => {
e.preventDefault();
$.addImage();
});
и второй вызов где-то еще в коде, как это
if ($target.hasClass('addImg')) {
const options = {
isKey1: 'yes',
otherKey: otherValue,
};
$.addImage(options);
}
при втором вызове объект «параметры» всегда по умолчанию принимает значение первого вызова. таким образом, в этом случае «параметры» равны нулю, поэтому ops становится нулевым. если я сначала вызову $.addImage(параметры), а затем вызову $.addImage (), во втором вызове будут все параметры, когда мне не нужны параметры.
Комментарии:
1. Нет, ваш код в порядке . Проблема находится снаружи.