[关闭]
@Chiang 2021-11-06T15:48:21.000000Z 字数 3589 阅读 393

javascript 实现表单提交,文件上传

form 2021-11


文中的代码 JavaScript 和 jQuery 混用,阅读时注意区分

即时上传图片示例

  1. //css样式:目的将表单样式修改成提交按钮
  2. <style>
  3. .file {
  4. position: relative;
  5. display: inline-block;
  6. background: #335883;
  7. border: 1px solid #335883;
  8. border-radius: 4px;
  9. padding: 4px 12px;
  10. overflow: hidden;
  11. color: hsl(240, 44%, 96%);
  12. text-decoration: none;
  13. text-indent: 0;
  14. line-height: 20px;
  15. }
  16. .file input {
  17. position: absolute;
  18. font-size: 100px;
  19. right: 0;
  20. top: 0;
  21. opacity: 0;
  22. }
  23. </style>
  24. //html元素,文件上传功能的表单绑定事件,实现脚本操作
  25. <span href="javascript:;" class="file">
  26. 上传
  27. <input type="file" name="logo4big" onchange="uploadimg(this)">
  28. </span>
  29. //javascript 脚本
  30. <script type="text/javascript">
  31. //上传图片
  32. function uploadimg(obj)
  33. {
  34. var formData = new FormData();
  35. formData.append(obj.name, obj.files[0]);
  36. formData.append('filename', obj.name);
  37. formData.append('cmp_id', "{$data.cmp_id}");
  38. $.ajax({
  39. url: "team.php?act=uploadimg",
  40. type: "POST",
  41. data:formData,
  42. cache:false, //不设置缓存
  43. processData: false, // 不处理数据
  44. contentType: false, // 不设置内容类型
  45. success:function (data) {
  46. //服务器返回上传文件的地址
  47. $('.'+obj.name).attr('src', JSON.parse(data).url);
  48. },
  49. error:function (data) {
  50. console.log(data);
  51. }
  52. });
  53. }
  54. </script>

删除元素

  1. <table id="addTr" style="display: none;">
  2. <tr>
  3. <td>
  4. <input type="hidden" name="zcmp_kfo_id[]" value="">
  5. </td>
  6. <td>
  7. <input type="text" name="kf_val[]" value="" >
  8. </td>
  9. <td>
  10. <input type="text" name="kf_code[]" value="" >
  11. </td>
  12. <td>
  13. <input type="text" name="show_order[]" value="" >
  14. </td>
  15. <td>
  16. <a class="bbtxn" onclick="$(this).parent().parent().remove()" title="删除">删除</a>
  17. </td>
  18. </tr>
  19. </table>

复制元素

  1. tr_data = $('#addTr').children().eq(0).html()

表单提交

  1. <form method="post" action="xxx.php" name="theForm" enctype="multipart/form-data" onsubmit="return validate()">
  2. <input type="submit" value="提交" />
  3. </form>
  4. <script type="text/javascript">
  5. document.forms['theForm'].elements['branch_id'].value;
  6. return document.forms['theForm'].submit();// 该方法提交表单的方式与用户单击 Submit 按钮一样,但是表单的 onsubmit 事件句柄不会被调用。
  7. return false;
  8. </script>
  • onsubmit只能表单上使用,提交表单前会触发
  • onclick是按钮等控件使用, 用来触发点击事件。
  • 在提交表单前,一般都会进行数据验证,可以选择在submit按钮上的onclick中验证,也可以在onsubmit中验证。但是onclick比onsubmit更早的被触发。
  • onsubmit处理函数返回false,onclick函数返回false,都不会引起表单提交。

用户点击按钮-》触发onclick事件-》onclick返回true或未处理onclick -》触发onsubmit事件 -》onsubmit未处理或返回true -》提交表单

ajax 表单提交

  1. $.ajax({
  2. type: "POST",
  3. url: www.baidu.com,
  4. data: $('#formId').serialize(),
  5. success: function (data) {
  6. },
  7. error: function(data) {
  8. }
  9. });

ajax通信

  1. var xhr = new XMLHttpRequest();
  2. xhr.onreadystatechange = function(){
  3. // 通信成功时,状态值为4
  4. if (xhr.readyState === 4){
  5. if (xhr.status === 200){
  6. console.log(xhr.responseText);
  7. } else {
  8. console.error(xhr.statusText);
  9. }
  10. }
  11. };
  12. xhr.onerror = function (e) {
  13. console.error(xhr.statusText);
  14. };
  15. xhr.open('GET', '/endpoint', true);
  16. xhr.send(null);
  17. $.ajax({
  18. url: "team.php?act=uploadimg",
  19. type: "POST",
  20. data:formData,
  21. cache:false, //不设置缓存
  22. processData: false, // 不处理数据
  23. contentType: false, // 不设置内容类型
  24. success:function (data) {
  25. //服务器返回上传文件的地址
  26. $('.'+obj.name).attr('src', JSON.parse(data).url);
  27. },
  28. error:function (data) {
  29. console.log(data);
  30. }
  31. });

ecshop ajax.call

var Ajax = Transport;
Ajax.call = Transport.run;
主要看 transport.js 文件

  1. Ajax.call('xxx.php?is_ajax=1&act=get_bumenid', 'bumen_id='+bumen_id, function(result)
  2. {
  3. var sel = document.forms['theForm'].elements['cn_name'];
  4. var userList = result.content;
  5. if (userList)
  6. {
  7. sel.options.length=0;
  8. var opt1 = document.createElement("OPTION");
  9. opt1.value = '';
  10. opt1.text = '请选择用户名...';
  11. sel.options.add(opt1);
  12. for (i = 0; i < userList.length; i++)
  13. {
  14. var opt = document.createElement("OPTION");
  15. opt.value = userList[i].name;
  16. opt.text = userList[i].name;
  17. sel.options.add(opt);
  18. }
  19. }
  20. }, 'POST', 'JSON');

参考资料:
表单,FormData 对象
https://www.cnblogs.com/ahudyan-forever/p/5795463.html
https://www.w3school.com.cn/jsref/met_form_submit.asp
https://www.jb51.net/article/164036.htm
https://wangdoc.com/javascript/bom/xmlhttprequest.html
https://jquery.cuishifeng.cn/jQuery.Ajax.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注