Возникли проблемы с получением значения тега select с раскрывающимся списком

я использую FabricJS уже пару дней, и у меня возникли проблемы с получением значения моего выпадающего меню, поэтому я могу правильно применить желаемую форму с помощью прослушивателя событий «щелчок». Поэтому, когда я нажимаю раскрывающееся меню и выбираю " прямоугольник" и нажмите кнопку, он должен создать прямоугольник. Вот мой код:

HTML:

   <p>Choose a Shape</p>

<select id = "shapesId">
    <option value = "square">Square</option>
    <option value = "rectangle">Rectangle</option>
    <option value = "triangle">Triangle</option>
    <option value = "circle">Circle</option>
    <option value = "polygon">Polygon</option>
    <option value = "ellipse">Ellipse</option>
    <option value = "line">Line</option>
</select>

<button id = "realShapes">Go!</button>

поэтому, когда мы нажимаем "Go!" Я хочу получить значение всего, что выбрано с помощью опции фигур. А теперь вот мой Javascript:

const shapes = document.getElementById("shapesId");
const e = shapes.value;
const clickShapes = document.getElementById("realShapes");
clickShapes.addEventListener("click", () => {
    
    if (e === "Rectangle") {
      const rect = new fabric.Rect({
        left: 100,
        top: 100,
        fill: 'black',
        width: 70,
        height: 70,
        angle: 45
    });
    canvas.add(rect);
    }
    
    canvas.renderAll();
})

Я так потерян прямо сейчас и пытался понять это часами, любая помощь будет оценена по достоинству. Спасибо тому, кто это читает!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте использовать это, чтобы получить выбранное значение shapeid (сохранит значение в xvalue):

var xvalue  = document.getElementById("shapesId").options[document.getElementById("shapesId").selectedIndex].value;

Дополнительная информация (вы можете использовать следующее в качестве рабочего примера):

<canvas id = "myCanvas" width = "400" height = "400"
style = "border:1px solid #ff0000;">
</canvas>

<br>

<p>Choose a Shape</p>

<select id = "shapesId">
    <option value = "">Please select</option>
    <option value = "rectangle">rectangle</option>
    <option value = "circle">circle</option>
</select>

<input type=button value = "DRAW" onclick = "javascript:draw();">





<script>

function draw() {

var xvalue  = document.getElementById("shapesId").options[document.getElementById("shapesId").selectedIndex].value;

if (xvalue= = "rectangle")  {

var c = document.getElementById("myCanvas");

var ctx = c.getContext("2d");
ctx.clearRect(0, 0, 400, 400);


var ctx = c.getContext("2d");
//ctx.clearRect(0, 0, canvas.width, canvas.height);

ctx.beginPath();
ctx.rect(20, 20, 150, 100);
ctx.stroke();
}

if (xvalue= = "circle")  {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.clearRect(0, 0, 400, 400);

var ctx = c.getContext("2d");
//ctx.clearRect(0, 0, canvas.width, canvas.height);

ctx.beginPath();
ctx.arc(95, 50, 40, 0, 2 * Math.PI);
ctx.stroke();
}
}


</script> 

отлично, кажется, немного работает. Это дает мне все прямоугольники на выходе. даже когда я выбираю круг, он выдает прямоугольник. я даже добавил код для создания круга, но он по-прежнему не дает мне ничего, кроме прямоугольников:/

clew-bot 23.12.2020 02:37

попытка изменить === «Прямоугольник» на == «прямоугольник» (используйте ==, а также используйте r вместо R, потому что ваше поле выбора использует r в качестве значения)

Ken Lee 23.12.2020 02:41

все еще ничего: / я пытался изменить на "= = " и R на r, но все равно не работает

clew-bot 23.12.2020 03:13

аааа ты герой

clew-bot 23.12.2020 03:22

Пожалуйста, посмотрите и попробуйте «Дополнительная информация» в моем ответе. Спасибо

Ken Lee 23.12.2020 03:29

спасибо Кен! я пытаюсь преобразовать этот код в Fabric, поэтому я добавил функцию onclick и добавил функцию в файл js. лучше использовать onClick, чем addeventlistener? Кстати, похоже, он еще не работает. я думаю, что я делаю что-то не так с моей стороны...

clew-bot 23.12.2020 03:51

И onclick, и addevenlistener (или просто используйте onchange) должны работать. Перейдите на использование fabric.js (используйте пошаговый подход), и вскоре вы сможете выполнить преобразование.

Ken Lee 23.12.2020 03:57

круто, буду держать вас в курсе! (при условии, что вы достаточно заботитесь) xD Большое спасибо за помощь!

clew-bot 23.12.2020 03:59

Большой ! Хорошего дня. (пожалуйста, отметьте этот пост как отвеченный, чтобы мы могли его закрыть)

Ken Lee 23.12.2020 04:06

Другие вопросы по теме