
本文详解为何使用 `
在 Web 表单开发中,常见需求是:当用户从下拉列表(
✅ 正确做法:仅使用 onchange 绑定下拉框
将原 html 中的:
✅ 改为(移除 onkeyup,仅保留 onchange):
⚠️ 注意: 的 change 事件会在用户完成选择并失去焦点(或按回车确认)时触发,这是语义正确的时机,无需模拟键盘行为。
✅ 修正 javaScript 中的 DOM 查询与类名匹配
原 js 中存在两个关键错误:
- row.queryselector(“.price”).value = myObj[1]; → 实际 input 的 class 是 “price1″(见 HTML 中 ),而非 “price”;
- row 参数未在函数作用域内稳定引用,尤其在异步回调中易丢失上下文。
✅ 推荐写法(含容错与可读性优化):
function GetDetail(row) { const tr = row || this.closest('tr'); // 确保 tr 引用可靠 const select = tr.querySelector('.scode'); const str = select.value.trim(); // 清空逻辑(支持清空选项,如 value="0") if (!str || str === '0') { tr.querySelector('.qty').value = ''; tr.querySelector('.price1').value = ''; tr.querySelector('.discunt').value = ''; return; } // 发起 AJAX 请求(建议升级为 fetch API) fetch(`gfg.php?user_id=${encodeURIComponent(str)}`) .then(response => { if (!response.ok) throw new Error('Network response was not ok'); return response.json(); }) .then(data => { // 假设返回数组格式:[qty, price, discount] tr.querySelector('.qty').value = data[0] || ''; tr.querySelector('.price1').value = data[1] || ''; tr.querySelector('.discunt').value = data[2] || ''; }) .catch(err => { console.error('Auto-fill failed:', err); alert('数据加载失败,请检查网络或服务端配置'); }); }
✅ HTML 结构必须合法且完整
原代码中