You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于HTML/JS实现决策树问答及结果导出的技术求助

解决方案

一、JS问答循环与HTML页面关联问题

1. 确保app.js正确引入

把app.js放在HTML文件的<body>标签末尾,或者添加defer属性,保证DOM加载完成后再执行JS:

<!-- 放在body末尾 -->
<script src="app.js"></script>
<!-- 或者放在head里加defer -->
<script src="app.js" defer></script>

2. 实现非阻塞式问答循环

浏览器里不能用同步循环(会卡住UI),应该用异步触发的方式,通过DOM事件推进问答流程。示例代码:

HTML结构:

<div id="question-container">
  <h3 id="question-text"></h3>
  <button id="yes-btn">Yes</button>
  <button id="no-btn">No</button>
</div>
<div id="result-container" style="display: none;">
  <h3>你的决策选项:</h3>
  <ul id="result-list"></ul>
  <button id="download-btn">下载结果</button>
</div>

app.js代码:

// 定义问题列表,每个元素包含问题文本和对应的Yes选项描述
const questions = [
  { text: "是否愿意做兼职?", yesOption: "尝试寻找兼职工作" },
  { text: "有无物品可办庭院售卖?", yesOption: "举办庭院售卖闲置物品" },
  // 补充剩余18个问题...
];

let currentQuestionIndex = 0;
const selectedOptions = [];

// 获取DOM元素
const questionTextEl = document.getElementById('question-text');
const yesBtn = document.getElementById('yes-btn');
const noBtn = document.getElementById('no-btn');
const resultContainer = document.getElementById('result-container');
const resultListEl = document.getElementById('result-list');
const downloadBtn = document.getElementById('download-btn');

// 显示当前问题
function showCurrentQuestion() {
  if (currentQuestionIndex < questions.length) {
    questionTextEl.textContent = questions[currentQuestionIndex].text;
  } else {
    // 问答结束,显示结果
    showResult();
  }
}

// 处理用户回答
function handleAnswer(isYes) {
  const currentQuestion = questions[currentQuestionIndex];
  if (isYes) {
    selectedOptions.push(currentQuestion.yesOption);
  }
  currentQuestionIndex++;
  showCurrentQuestion();
}

// 显示结果并生成下载按钮
function showResult() {
  document.getElementById('question-container').style.display = 'none';
  resultContainer.style.display = 'block';
  
  // 渲染选中的选项
  selectedOptions.forEach(option => {
    const li = document.createElement('li');
    li.textContent = option;
    resultListEl.appendChild(li);
  });
  
  // 绑定下载事件
  downloadBtn.addEventListener('click', downloadResult);
}

// 下载结果到文件
function downloadResult() {
  const content = selectedOptions.join('\n');
  const blob = new Blob([content], { type: 'text/plain' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = '决策参考.txt'; // 自定义文件名
  a.click();
  URL.revokeObjectURL(url); // 释放资源
}

// 初始化,显示第一个问题
yesBtn.addEventListener('click', () => handleAnswer(true));
noBtn.addEventListener('click', () => handleAnswer(false));
showCurrentQuestion();

二、文件保存路径问题

浏览器出于安全限制,不允许JS直接指定文件保存路径,最优方案就是在问答完成后显示下载按钮,让用户自行选择保存位置。上面的代码已经实现了这个功能,通过Blob生成文件内容,创建临时下载链接触发浏览器下载流程。

三、当前方案可行性与是否转用Python

  1. HTML/JS方案完全可行:如果你的目标是做一个可以在浏览器中运行的Web应用,这个方案足够,而且无需安装环境,用户直接打开HTML文件就能使用。
  2. 是否转Python?:
    • 如果需要开发桌面端应用(比如要离线运行、本地文件操作更灵活),可以考虑用Python结合PyQt/Tkinter等GUI库实现;
    • 如果只是Web端使用,没必要转Python,HTML/JS的方案更轻量、易分享。

内容的提问来源于stack exchange,提问作者NAVI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:10:17