jQuery UI 可拖动和可放置:第一个元素在放置事件处理程序中未定义

问题描述 投票:0回答:1

我正在使用 jQuery UI 的可拖放功能开发一个 Web 应用程序(通过 python Flask 服务器)。我有可拖动的元素,当放入可放置区域时应该将它们组合起来。但是,我遇到了一个问题,即 drop 事件处理程序中未定义 firstElement 变量。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Element Combination Game</title>
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
    <div id="elements-container">
        <div class="draggable" id="air" draggable="true">Air</div>
        <div class="draggable" id="earth" draggable="true">Earth</div>
        <div class="draggable" id="fire" draggable="true">Fire</div>
        <div class="draggable" id="water" draggable="true">Water</div>
    </div>
    <div id="game-area">
        <div id="result"></div>
    </div>
    <script>
    $(function() {
        let firstElement = null;

        $(".draggable").draggable({
            helper: "clone",
            start: function(event, ui) {
                $(this).css("opacity", "0.5");
            },
            stop: function(event, ui) {
                $(this).css("opacity", "1");
            }
        });

        $("#game-area").droppable({
            accept: ".draggable",
            hoverClass: "dragover",
            drop: function(event, ui) {
                const droppedElement = ui.helper.attr('id');
                console.log("Dropped element ID:", droppedElement); // Debug log

                if (!droppedElement) {
                    console.error("Dropped element has no ID");
                    return;
                }

                if (firstElement) {
                    const element1 = firstElement;
                    const element2 = droppedElement;
                    console.log("Combining elements:", element1, element2); // Debug log

                    // Perform AJAX call here
                    // $.ajax({ ... });

                    firstElement = null;
                } else {
                    firstElement = droppedElement;
                    $("#result").text(`First element selected: ${firstElement}`);
                    console.log("First element set to:", firstElement); // Debug log
                }
            }
        });
    });
    </script>
</body>
</html>

问题: 当我拖放元素时,firstElement 变量显示为未定义。我已经验证了 HTML 中的 ID 设置正确,并且 jQuery UI 可拖放设置似乎正确。

采取的故障排除步骤:

检查 HTML ID 的一致性。 已验证在放置处理程序中是否正确设置了firstElement。 添加了调试日志以检查变量值。

为什么firstElement未定义,如何解决这个问题?

如果它与我正在使用的AI API或Python有任何关系,我会给出Python代码。

javascript html variables web undefined
1个回答
0
投票

在您的代码中,firstElement 在 drop 事件中被正确设置,但是当您放置元素时, ui.helper 可能没有预期的 id。确保 id 属性在 HTML 中正确设置,并且 ui.helper 在删除时具有该属性。

要修复此问题,您应该检查 ui.helper 是否正确获取 id:

const droppedElement = ui.helper.attr('id'); 

确保当您设置firstElement时,它具有预期的ID:

firstElement = droppedElement;

因此,请验证拖放元素时是否正确设置和使用了 ID。

© www.soinside.com 2019 - 2024. All rights reserved.