
嘻道奇闻
- 文章199742
- 阅读14625734
jQuery如何正确获取表单元素值?input与select实例解析
你是不是经常遇到这种情况——明明在网页里输入了数据,用jQuery取值时却显示undefined?或者选好了下拉框选项,代码死活读不到正确内容?别慌!今天咱们就来解决这个让新手抓狂的问题。就像“新手如何快速涨粉”需要掌握平台规则一样,想玩转jQuery表单操作,这几个核心方法必须得整明白!
(停顿一下)先说说最常见的翻车现场吧。昨天有个学员问我:“老师,我照着网上的代码写了$('input').val(),为什么有时候能拿到值,有时候又不行?”其实啊,这里头门道可多了...
??一、为什么拿不到表单的值???
- ??元素没选对??:用错选择器就像用钥匙开别人家的锁
- ??取值时机不对??:按钮还没点击就急着拿值
- ??表单类型特殊??:比如radio单选按钮和checkbox多选框
- ??浏览器缓存作妖??:特别是select下拉框的默认值问题
举个真实案例:有个做登录页面的兄弟,死活获取不到密码框的值。最后发现是因为他写的选择器是$('.password'),而实际HTML里class写成了pass-word(中间多了个横线)...
??二、基础方法看这里??
咱们先搞定最常用的input输入框和select下拉框:
??1. input文本框取值??
三步走战略:
- 第一步:选中元素 →
$('#username')
- 第二步:调用val() →
.val()
- 第三步:处理数据 →
if(value.length >6){...}
(思考痕迹)这时候你可能会想——等等,我明明写了代码啊!比如:
javascript复制var name = $('#user').val(); console.log(name); // 输出空字符串
问题很可能出在:你的代码在页面加载时就执行了,这时候用户还没来得及输入呢!这时候就需要事件监听来救命了。
??三、select下拉框的坑??
遇到过这种情况吗?明明选了"北京",取到的却是第一个选项的值。这是因为:
- 老版本浏览器对
selectedIndex
支持有问题 - 动态生成的option没正确绑定事件
- 用了框架像Bootstrap却忘了处理插件特性
??正确操作姿势??:
javascript复制// 取显示文本 $('#city option:selected').text() // 取value值 $('#city').val()
(突然拍大腿)对了!如果你给select标签加了multiple属性变成多选,这时候.val()返回的就是数组了,得用循环处理。
??四、自问自答环节??
Q:为什么有时候.val()拿到的是空值?
A:检查三件套:①元素是否加载完成 ②选择器是否正确 ③是不是用了disabled属性
Q:动态创建的输入框怎么取值?
A:要用事件委托!举个栗子:
javascript复制$('body').on('change','.new-input',function(){ console.log($(this).val()) })
Q:radio单选按钮怎么搞?
A:遍历所有选项找被选中的:
javascript复制$('input[name=gender]:checked').val()
??小编观点??
说实在的,jQuery取表单值这事儿,就像学骑自行车——看起来简单,真上车了才发现要保持平衡不容易。关键是要养成三个习惯:
- 写完选择器先console.log输出看看是不是真选到元素了
- 涉及表单提交一定要加
e.preventDefault()
阻止默认行为 - 对特殊表单控件单独写测试用例
(放慢语速)最后说句掏心窝的话:别死记硬背语法!哪天你突然发现document.getElementById('xx').value
和$('#xx').val()
拿到的值不一样时,记得回来看看是不是jQuery版本升级导致的问题...