FF下innerHTML获取不到input标签中value的值解决办法

页面代码:

<div id="divid">

<input type="text" value="" id="testid" />

</div>

很多时候,,,页面上input标签中的value需要通过javascript动态设置其值:document.getElementById('testid').value='test value';

通过document.getElementById(‘divid’).innerHTML:

IE下:<input type="text" value="test value" id="testid" />

FF下:<input type="text" value="" id="testid" />


这就达不到我们想要的效果。。。。。


解决办法:

document.getElementById('testid').value='test value';

修改为:

var testid = document.getElementById('testid');

testid.value = "test value";

testid.setAttribute("value", testid.value);

这样就通过innerHTML在FF下就可以获取和IE下一样的效果了。。。。。



<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>注册界面</title> </head> <body> <div id="register_div" style="margin-left: 8cm;"> <h1 style="color: burlywood; margin: left 2cm;;">用户注册</h1> <form action="test.html" method="post" onsubmit="return check()"> <label>用户账号:</label> <input id="account" type="text" style="height: 0.65cm;border-color:cadetblue;border-radius: 0.25cm;margin: 0.3cm;"/><span id="account_info"></span></br> <label>用户邮箱:</label> <input id="email" type="email"style="height: 0.65cm;border-color:cadetblue;border-radius: 0.25cm;margin: 0.3cm;"/><span id="account_info"></span></br> <label>用户号码:</label> <input id="mobile" type="text"style="height: 0.65cm;border-color:cadetblue;border-radius: 0.25cm;margin: 0.3cm;"/><span id="account_info"></span></br> <label>用户密码:</label> <input id="password" type="password"style="height: 0.65cm;border-color:cadetblue;border-radius: 0.25cm;margin: 0.3cm;"/><span id="account_info"></span></br> <label>确认密码:</label> <input id="repassword" type="password"style="height: 0.65cm;border-color:cadetblue;border-radius: 0.25cm;margin: 0.3cm;"/><span id="account_info"></span></br> <input type="submit" value="注册" style="margin-left: 2.5cm;height: 1cm;width: 2cm; background-color:darkcyan; border-radius: 0.25cm;" /> </form> </div> <script type="text/javascript"> function check(){ var account =document.getElementById("account").value var account_patt=/^[a-zA-Z]+[0-9]+[a-zA-Z]*/ if(account ==""){ document.getElementById("account_info").innerHTML="<font color='red'>账号不能为空</font>" return false }else if(account.length<3 ||account.length>10){ document.getElementById("account_info").innerHTML="<font color='red'>账号的长度必须要在3-10</font>" return false }else if(account_patt.test((account))){ document.getElementById("account_info").innerHTML="<font color='red'>账号以字母开头包含数字,且长度在3-10之间</font>" return false } return tr
04-01
<think>嗯,用户需要实现HTML注册表单的前端验证,包括账号、邮箱、手机号码和密码。首先,我得确定每个字段的验证规则。 账号的话,可能要求是字母开头,包含字母数字和下划线,长度在6到20位之间。用正则表达式的话,应该是^[a-zA-Z][a-zA-Z0-9_]{5,19}$。然后邮箱的验证,HTML5有内置的type="email",但可能需要更严格的检查,比如使用正则表达式,比如检查是否有@符号和域名部分。不过标准正则可能比较复杂,可以参考现有的模式。 手机号码,国内一般是11位数字,以1开头。正则表达式可以是^1[3-9]\d{9}$。密码需要至少8位,包含大小写字母和数字,可能还需要特殊字符。正则的话,可以用^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$这样的结构。 接下来,前端验证可以通过HTML5的属性,比如required、pattern,再结合JavaScript进行实时验证。可能需要为每个输入字段添加事件监听器,比如oninput或onblur,在输入时或离开焦点时触发验证函数。 然后,提交表单时要阻止默认提交行为,用JavaScript检查所有字段是否通过验证,如果有错误就显示提示信息。同时,需要确保后端也有验证,因为前端验证可以被绕过。 另外,用户体验方面,应该在输入框旁边实时显示错误提示,比如用span元素,通过CSS控制样式,当验证不通过时显示红色文字。 可能会遇到的问题包括正则表达式不够精确,比如手机号的第二位可能有限制,或者密码复杂度要求不同,需要根据用户需求调整。还要注意转义正则中的特殊字符,避免错误。 测试用例也需要考虑,比如账号是否允许下划线,邮箱的域名部分是否有效,手机号是否包含非数字字符,密码是否符合所有复杂度要求等。 最后,代码结构方面,可能需要将每个验证函数分开,比如validateUsername、validateEmail等,然后在提交时汇总所有验证结果。同时,使用CSS类来控制错误提示的显示和隐藏,提高可维护性。</think>### HTML注册表单前端验证实现步骤 #### 基础HTML结构 ```html <form id="registerForm" novalidate> <!-- 账号输入 --> <div class="form-group"> <label>账号:</label> <input type="text" id="username" required pattern="^[a-zA-Z][a-zA-Z0-9_]{5,19}$"> <span class="error-msg"></span> </div> <!-- 邮箱输入 --> <div class="form-group"> <label>邮箱:</label> <input type="email" id="email" required> <span class="error-msg"></span> </div> <!-- 手机号输入 --> <div class="form-group"> <label>手机号:</label> <input type="tel" id="mobile" required pattern="^1[3-9]\d{9}$"> <span class="error-msg"></span> </div> <!-- 密码输入 --> <div class="form-group"> <label>密码:</label> <input type="password" id="password" required pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d@$!%*?&]{8,}$"> <span class="error-msg"></span> </div> <button type="submit">注册</button> </form> ``` #### 验证规则说明 1. **账号验证**:`^[a-zA-Z][a-zA-Z0-9_]{5,19}$` - 首字母必须为英文 - 允许包含字母、数字和下划线 - 长度6-20个字符 2. **邮箱验证**:`type="email"`结合自定义正则 - 标准邮箱格式验证 - 需要包含@符号和有效域名 - 推荐正则:`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` 3. **手机号验证**:`^1[3-9]\d{9}$` - 11位数字 - 以1开头,第二位为3-9 4. **密码验证**:`^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d@$!%*?&]{8,}$` - 至少8个字符 - 包含大小写字母和数字 - 可选的允许特殊字符 #### JavaScript验证逻辑 ```javascript document.getElementById('registerForm').addEventListener('submit', function(e) { e.preventDefault(); const isValid = [ validateField('username', '账号格式不正确'), validateField('email', '邮箱格式不正确', /^[^\s@]+@[^\s@]+\.[^\s@]+$/), validateField('mobile', '手机号格式不正确'), validateField('password', '密码需包含大小写字母和数字') ].every(result => result); if(isValid) { // 提交表单逻辑 console.log('验证通过'); } }); function validateField(id, errorMsg, customRegex) { const field = document.getElementById(id); const errorSpan = field.nextElementSibling; let isValid = true; if (customRegex) { isValid = customRegex.test(field.value); } else { isValid = field.checkValidity(); } errorSpan.textContent = isValid ? '' : errorMsg; return isValid; } ``` #### CSS样式建议 ```css .error-msg { color: #ff4444; font-size: 0.8em; height: 1.2em; display: block; } input:invalid { border-color: #ff4444; } ``` ### 关键验证逻辑说明 1. **实时验证**:通过`input`事件监听实现即时反馈 2. **多重验证策略**: - HTML5原生验证(如`required`、`pattern`) - JavaScript自定义正则验证 - 服务端二次验证(必须补充前端验证) 3. **错误提示系统**:动态显示错误信息,保持用户界面友好性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值