jQuery, передающий параметры пользовательской функции, не работает должным образом

#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. Нет, ваш код в порядке . Проблема находится снаружи.