
本文详解 jQuery 中通过事件委托获取表单内 select 和 input 元素值的正确方法,避免因误用 $(this).val() 导致值为空的问题,并提供可直接运行的修复代码与关键注意事项。
本文详解 jquery 中通过事件委托获取表单内 select 和 input 元素值的正确方法,避免因误用 `$(this).val()` 导致值为空的问题,并提供可直接运行的修复代码与关键注意事项。
在使用 jQuery 处理表单提交并发送 AJAX 请求时,一个常见误区是:将事件绑定在 <form></form> 上(如 $('#historic_form').submit(...)),却错误地对 this(即整个表单 DOM 元素)调用 .val() 方法。表单元素(<form></form>)本身没有 value 属性,因此 $(this).val() 永远返回空字符串或 undefined —— 这正是你 alert(day) 显示为空的根本原因。
要正确获取用户输入,必须精准定位到目标表单控件(如 <select id="fund_id"></select> 或 <input id="histDate">),再对其调用 .val()。以下是修正后的完整代码:
$('#historic_form').submit(function(e) {
e.preventDefault();
// ✅ 正确:通过 ID 精准选取控件并获取其值
var fund_id = $('#fund_id').val(); // 获取 fund_id 下拉框选中的 value
var day = $('#histDate').val(); // 获取日期输入框的值(注意:ID 是 histDate,不是 day)
// 可选:添加基础校验
if (!fund_id || !day) {
alert('请选择基金和日期!');
return;
}
$.ajax({
url: 'Search/Searchday',
type: 'POST',
dataType: 'json',
data: { fund_id: fund_id, day: day },
error: function(xhr, status, error) {
console.error('AJAX 请求失败:', error);
alert('请求失败,请检查网络或参数');
},
success: function(response) {
// ⚠️ 注意:原代码中 title / description 未定义,应根据 response 动态提取
// 示例(假设 response 是 {title: "xxx", description: "yyy"}):
$("tbody").append(`<tr>
<td>${response.title}</td>
<td>${response.description}</td>
</tr>`);
}
});
});
? 关键注意事项:
-
ID 必须唯一且匹配:HTML 中
<input id="histDate">的 ID 是histDate,而非name="day";jQuery 选择器依赖id属性,与name无关。 -
动态下拉框需确保值已加载:
#fund_id是动态生成的<select></select>,请确认其选项已在 DOM 加载完成、且用户已做出有效选择(排除 disabled 的 placeholder 项)。 -
日期格式兼容性:
<input type="date">返回标准 ISO 格式(如"2024-05-20"),后端需按此格式解析;若需"dd/mm/yyyy",建议前端格式化或后端适配。 -
避免变量名混淆:HTML 中
name="day"仅用于表单序列化,与 JS 变量名无关;JS 中推荐用语义化变量名(如selectedDate)提升可读性。
✅ 总结:获取表单值 = $('#控件ID').val(),而非 $(this).val()。掌握这一原则,即可稳定捕获用户输入,为后续 AJAX 交互打下坚实基础。










