я использую 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();
})
Я так потерян прямо сейчас и пытался понять это часами, любая помощь будет оценена по достоинству. Спасибо тому, кто это читает!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте использовать это, чтобы получить выбранное значение 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>
попытка изменить === «Прямоугольник» на == «прямоугольник» (используйте ==, а также используйте r вместо R, потому что ваше поле выбора использует r в качестве значения)
все еще ничего: / я пытался изменить на "= = " и R на r, но все равно не работает
аааа ты герой
Пожалуйста, посмотрите и попробуйте «Дополнительная информация» в моем ответе. Спасибо
спасибо Кен! я пытаюсь преобразовать этот код в Fabric, поэтому я добавил функцию onclick и добавил функцию в файл js. лучше использовать onClick, чем addeventlistener? Кстати, похоже, он еще не работает. я думаю, что я делаю что-то не так с моей стороны...
И onclick, и addevenlistener (или просто используйте onchange) должны работать. Перейдите на использование fabric.js (используйте пошаговый подход), и вскоре вы сможете выполнить преобразование.
круто, буду держать вас в курсе! (при условии, что вы достаточно заботитесь) xD Большое спасибо за помощь!
Большой ! Хорошего дня. (пожалуйста, отметьте этот пост как отвеченный, чтобы мы могли его закрыть)
отлично, кажется, немного работает. Это дает мне все прямоугольники на выходе. даже когда я выбираю круг, он выдает прямоугольник. я даже добавил код для создания круга, но он по-прежнему не дает мне ничего, кроме прямоугольников:/