小能豆

从 Javascript 转换为 Pyscript 后,聊天框不起作用

javascript

我有一个基于 Javascript 创建的 HTML 聊天框。现在我正在尝试将 Javascript 代码转换为 Pyscript,以更好地简化数据分析工具。然而,翻译后,聊天框无法正常工作。我已经发布了 Pyscript 和 Javascript 版本的代码进行比较。

你能告诉我 Pyscript 代码有什么问题吗?谢谢。


带有基于pyscript的聊天框的.html文件(即翻译后的代码)如下。单击“发送”按钮后,没有任何反应。它应该在一行中显示问题,在下一行中显示答案。

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="UTF-8">
  <!-- PyScript CSS and JS -->
  <link rel="stylesheet" href="https://pyscript.net/releases/2024.1.3/core.css"/>
  <script type="module" src="https://pyscript.net/releases/2024.1.3/core.js"></script>
</head>
<body>
  <div id="contents">
    <div class="post">
      <br><br><br><br>
      <p>
        Post your question here. The answer will be returned in the next row. 
        <div id="chatbox">
          <div id="messages"></div>
          <input type="text" id="userInput" placeholder="Type a message...">
          <button id="sendButton">Send</button>
        </div>
        <py-script>
          from js import document

          def send_message(event):
              input_element = document.getElementById("userInput")
              message = input_element.value.trim()
              if message:
                  messages_container = document.getElementById("messages")
                  new_message = document.createElement("div")
                  new_message.textContent = message
                  messages_container.appendChild(new_message)
                  input_element.value = ""  # Clear input field
                  messages_container.scrollTop = messages_container.scrollHeight  # Scroll to the bottom

                  # Simulated response
                  response = document.createElement("div")
                  response.textContent = "The response should be displayed here."
                  messages_container.appendChild(response)
                  messages_container.scrollTop = messages_container.scrollHeight  # Scroll to the bottom again

          send_button = document.getElementById("sendButton")
          send_button.addEventListener("click", send_message)
        </py-script>
      </p>
    </div>
  </div>

</body>
</html>

Javascript 版本的代码运行良好。代码如下。

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <div id="contents">
    <div class="post">
      <br><br><br><br>
      <p>
        Post your question here. The answer will be returned in the next row. 
        <div id="chatbox">
          <div id="messages"></div>
          <input type="text" id="userInput" placeholder="Type a message...">
          <button onclick="sendMessage()">Send</button>
      </div>
      <script>
          function sendMessage() {
              var input = document.getElementById("userInput");
              var message = input.value.trim();
              if (message !== "") {
                  // Post question here.
                  var messagesContainer = document.getElementById("messages");
                  var newMessage = document.createElement("div");
                  newMessage.textContent = message;
                  messagesContainer.appendChild(newMessage);
                  input.value = ""; // Clear input field
                  messagesContainer.scrollTop = messagesContainer.scrollHeight; // Scroll to the bottom
                  // Post anwer here. 
                  var newMessage = document.createElement("div");
                  newMessage.textContent = "The response should be displayed here.";
                  messagesContainer.appendChild(newMessage);
                  input.value = ""; // Clear input field
                  messagesContainer.scrollTop = messagesContainer.scrollHeight; // Scroll to the bottom
              }
          }
      </script> 
      </p>
    </div>
  </div>

</body>
</html>

阅读 187

收藏
2024-02-24

共1个答案

小能豆

从您提供的代码中,可以看出在转换为 Pyscript 之后,您似乎在 <py-script> 标签中执行了 Python 代码。然而,Pyscript 并不是用于在 HTML 中执行 Python 代码的工具,而是用于将 Python 代码转换为 JavaScript 代码的工具。

您需要确保您的 Python 代码被转换为 JavaScript 代码,并且在 HTML 中以正确的方式执行。以下是您应该执行的步骤:

  1. 使用 Pyscript 将 Python 代码转换为 JavaScript 代码: 您的 Python 代码应该在 JavaScript 中执行。确保您的 Python 代码被正确地转换为 JavaScript 代码,并且逻辑与原始的 JavaScript 版本相同。
  2. 在 HTML 中正确加载转换后的 JavaScript 代码: 将转换后的 JavaScript 代码加载到您的 HTML 文件中,并确保它在正确的地方执行以响应用户的交互操作。
  3. 确保 HTML 结构和 JavaScript 交互正确: 确保转换后的 JavaScript 代码与 HTML 结构正确交互,以便在用户与聊天框交互时,正确地显示问题和回答。

以下是您的 HTML 文件应该如何修改:

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="UTF-8">
  <!-- 加载 Pyscript CSS 和 JS -->
  <link rel="stylesheet" href="https://pyscript.net/releases/2024.1.3/core.css"/>
  <script type="module" src="https://pyscript.net/releases/2024.1.3/core.js"></script>
</head>
<body>
  <div id="contents">
    <div class="post">
      <br><br><br><br>
      <p>
        Post your question here. The answer will be returned in the next row. 
        <div id="chatbox">
          <div id="messages"></div>
          <input type="text" id="userInput" placeholder="Type a message...">
          <button id="sendButton">Send</button>
        </div>
      </p>
    </div>
  </div>

  <script>
    // 这里是您转换后的 JavaScript 代码
    function send_message(event) {
      const input_element = document.getElementById("userInput");
      const message = input_element.value.trim();
      if (message) {
        const messages_container = document.getElementById("messages");
        const new_message = document.createElement("div");
        new_message.textContent = message;
        messages_container.appendChild(new_message);
        input_element.value = "";  // 清除输入字段
        messages_container.scrollTop = messages_container.scrollHeight;  // 滚动到底部

        // 模拟响应
        const response = document.createElement("div");
        response.textContent = "The response should be displayed here.";
        messages_container.appendChild(response);
        messages_container.scrollTop = messages_container.scrollHeight;  // 再次滚动到底部
      }
    }

    const send_button = document.getElementById("sendButton");
    send_button.addEventListener("click", send_message);
  </script>
</body>
</html>

请确保您的 Python 代码已正确转换为 JavaScript 代码,并且将其包含在 HTML 文件中以正确执行。同时,确保 JavaScript 代码与 HTML 结构正确交互,以确保聊天框在用户交互时正常工作。

2024-02-24