05浏览器-03-操作表单和文件

1、操作表单

1.1 表单提交

之前提到过使用JS操作DOM,实际上这里操作表单的方式是一样的。

获取表单中的值和状态等,再对其节点加以利用其属性如value、checked等属性就可以了。

这里主要描述表单提交的方式,一般浏览器默认点击 <button type="submit"> 时提交表单,实际上,我们稍作变化,下面也是我们经常可以使用的提交表单的方式:

第一种
  • button响应click事件,触发方法抓取节点form,通过该对象的submit()方法进行提交
<!-- HTML --> 
<form id="test-form">
    <input type="text" name="test">
    <button type="button" onclick="doSubmitForm()">Submit</button>
</form>

<script>
function doSubmitForm() {
    var form = document.getElementById('test-form');
    // 可以在此修改form的input...
    // 提交form:
    form.submit();
}
</script>

第二种
  • 响应<form>的onsubmit事件,提交form时作修改
<!-- HTML -->
<form id="test-form" onsubmit="return checkForm()">
    <input type="text" name="test">
    <button type="submit">Submit</button>
</form>

<script>
function checkForm() {
    var form = document.getElementById('test-form');
    // 可以在此修改form的input...
    // 继续下一步:
    return true;
}
</script>
return true来表示浏览器继续提交,如果return false,浏览器将不会继续提交form。这种情况通常对应用户输入有误,提示用户错误信息后终止提交form。

1.2 密码提交

很多登录表单希望用户输入用户名和口令,但是,安全考虑,提交表单时不传输明文口令,而是口令的MD5。

所以在提交之前通过JS转换:
function checkForm() {
    var pwd = document.getElementById('password');
    // 把用户输入的明文变为MD5:
    pwd.value = toMD5(pwd.value);
    // 继续下一步:
    return true;
}

这就是你有时候输入了账号密码,发现点击登陆提交时,密码框的显示会突然从几个星变成32个星(因为MD5有32个字符)

如果不想有这种页面的明显变化,可以利用hidden的input,用来存储MD5和提交:
<!-- HTML -->
<form id="login-form" method="post" onsubmit="return checkForm()">
    <input type="text" id="username" name="username">
    <input type="password" id="input-password">
    <input type="hidden" id="md5-password" name="password">
    <button type="submit">Submit</button>
</form>

<script>
function checkForm() {
    var input_pwd = document.getElementById('input-password');
    var md5_pwd = document.getElementById('md5-password');
    // 把用户输入的明文变为MD5:
    md5_pwd.value = toMD5(input_pwd.value);
    // 继续下一步:
    return true;
}
</script>
注意到id为md5-password的<input>标记了name="password",而用户输入的id为input-password的<input>没有name属性。没有name属性的<input>的数据不会被提交

2、操作文件

在HTML表单中,可以上传文件的唯一控件就是<input type="file">

注意:当一个表单包含<input type="file">时,表单的enctype必须指定为 multipart/form-datamethod必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据。

处于安全考虑,JS无法获取上传的某个文件的真实路径,也无法通过更改<input type="file">的value属性来改变文件内容。

通常,对于文件上传,JS在前台对文件扩展名做检查,防止上传无效格式的文件。而文件的处理,都是由后台服务器来处理。

posted @ 2017-04-07 11:06  Dulk  阅读(399)  评论(0编辑  收藏  举报