Скрипт для обрезки изображения не работает из-за неопределенной переменной после того, как я провел некоторый рефакторинг своего кода

#javascript #jquery

Вопрос:

Привет, друзья со всего мира. Я искал, как заставить этот скрипт работать, он предназначен для обрезки изображения с использованием координат, но, по-видимому, что-то не получается. Я довольно новичок в javascript и jQuery, но, думаю, я почти понял это.

Я получаю неопределенные ошибки в моей переменной value (v).

 portada_next.on("click", function () {
    if(portada_uploader.isValid amp;amp; !portada_uploader.isEmpty){
        portada_next.parents(".carousel").carousel("next");
        $.each(portada_uploader.inputs, function (v,k) {
            let img = $(v.previewer.img).clone();
            img.addClass("img-fluid");
            $("#crop").append(img);
            const nw = img.get(0).naturalWidth;
            const nh = img.get(0).naturalHeight;
            img.Jcrop({
                minSize: 0,
                aspectRatio: 2,
                setSelect: [ 0, img.height()/2, nw,nh],
                allowResize: true,
                allowSelect: false,
                trueSize: [nw,nh],
                onChange: function (coords) {
                    my_coords = coords;
                }
            });
        });
    }
});
 

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

Комментарии:

1. ну, единственный способ v быть неопределенным — это если одно из значений portada_uploader.inputs не определено- console.log(portada_uploader.inputs) и проверьте значения

2. Вы правы, после проверки ответа Алессандро сценарий работает. Неопределенная проблема пришла из другой части, но теперь она исправлена. Большое спасибо за вашу помощь @JaromandaX

3. итак, дело было не v в том, что было неопределенно, а в том v.previewer , что было неопределенно — потому что вы поменялись местами k и v… Держу пари, ошибка заключалась не в том, что v не определен, а в том, что v. предварительный просмотр был

Ответ №1:

Эй, я думаю, что нашел твою проблему, ты используешь ключ вместо значения, вот почему твой сценарий проваливается.

Эта строка: $.each(portada_uploader.inputs, function (k,v) { говорит v (значение), k (ключ), но она должна быть инвертирована. Проверьте это, а затем проверьте, работает ли это.

 portada_next.on("click", function () {
    if(portada_uploader.isValid amp;amp; !portada_uploader.isEmpty){
        portada_next.parents(".carousel").carousel("next");
        $.each(portada_uploader.inputs, function (k,v) {
            let img = $(v.previewer.img).clone();
            img.addClass("img-fluid");
            $("#crop").append(img);
            const nw = img.get(0).naturalWidth;
            const nh = img.get(0).naturalHeight;
            img.Jcrop({
                minSize: 0,
                aspectRatio: 2,
                setSelect: [ 0, img.height()/2, nw,nh],
                allowResize: true,
                allowSelect: false,
                trueSize: [nw,nh],
                onChange: function (coords) {
                    my_coords = coords;
                }
            });
        });
    }
});