跳至主要內容

form

chanchaw大约 4 分钟javascript

表单校验

// formValidate 是表单校验的结果,true 表示校验通过
const formValidate = $('#barcode_form').form('validate');
if(!formValidate){

submit

<!-- 
	onsubmit事件是在提交表单时触发
	return 一个函数:是指当函数的返回值为false时,表单不提交,为true时提交
	mySubmit函数中的参数this是指form调用该函数时会将form传入函数中
-->
<form action="" method="post" target="_blank" onsubmit="return mySubmit(this)">
	<input type="text" name="username" >
	<input type="submit" name="submit" >	
</form>

获取表单数据

获取指定属性

<form action="" method="post">
  <input type="text" name="name" id="name" value="aaa">
  <input type="password" name="password" id="password">
  <input type="submit" name="submit" value="提交" id="submit">
</form>
<script>
	var name1 = document.getElementById('name').value; //获取id为name的值
	var submit1 = document.getElementById('submit');//获取submit.准备为其绑定事件
	submit1.onclick = function(){alert(name1)}//为submit绑定点击事件,将name的值在也页面弹窗显示
</script>

获取form全部数据

// onsubmit事件是在提交表单时触发
// return 一个函数:是指当函数的返回值位false时,表单不提交,为true时提交
// mySumit函数中的参数this是指form调用该函数时会将form传入函数中
<form action="" method="post" target="_blank" onsubmit="return mySubmit(this)">
	<input type="text" name="username" >
	<input type="submit" name="submit" >	
</form>
<script>
	function mySubmit(form){
	<!--定义formData对象-->
		let formData = new FormData(form);
		<!--利用fromData对象的get方法获取表单数据-->
		let username = formData.get('username');
		<!--进行一些判断或者操作-->
		if(username.length < 5){
			alert('用户名不得小于5位');
			return false;
		}else{
			return true;
		}
		return false;

	}
</script>

封装工具获取表单数据

function serializeObject(form) { /*将form表单内的元素序列化为对象,扩展Jquery的一个方法*/
  let o = {};
  $.each(form.serializeArray(), function (index) {
    if (o[this['name']]) {
      o[this['name']] = o[this['name']] + "," + this['value'];
    } else {
      o[this['name']] = this['value'];
    }
  });
  return o;
};

为表单赋值

jquery

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script type="text/javascript" src="./jquery.min.js"></script>
    <title>演示表单赋值的方法</title>
</head>
<body>

<button onclick="setFormData()">为表单赋值</button>
<form id="form">
    <div class="form-group">
        <label for="exampleInputEmail1">input</label>
        <input type="text" class="form-control" name="input" />
    </div>
    <div class="form-group">
        <label for="exampleInputEmail1">input</label>
        <textarea name="textarea">

        </textarea>
    </div>
    <div class="form-group">
        <label>select</label>
        <select name="select">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
    </div>
    <div class="checkbox">
        <div>
            <label>
                <input type="checkbox" name="test" value="1">
                第一个
            </label>
        </div>
        <div>
            <label>
                <input type="checkbox" name="test" value="2">
                第二个
            </label>
        </div>
        <div>
            <label>
                <input type="checkbox" name="test" value="3">
                第三个
            </label>
        </div>
        <div>
            <label>
                <input type="checkbox" name="test" value="4">
                第四个
            </label>
        </div>
    </div>
    <div class="checkbox">
        <label>
            <input type="checkbox" name="checkboxtest">
            第一个
        </label>
    </div>
    <div class="checkbox">
        <label>
            <input type="radio" name="radiotest" value="1"></label>
        <label>
            <input type="radio" name="radiotest" value="2"></label>
        <label>
            <input type="radio" name="radiotest" value="3"></label>
    </div>
    <input type="button" value="确定" onclick="setValueTest()" />
</form>
</body>

<script type="text/javascript">
    // 扩展自定义方法
    ;!(function ($)
    {
        $.fn.setFormValue = function (options)
        {
            var $this = $(this);
 
            $.each(options, function (key, value)
            {
                var obj = $this.find("*[name=" + key + "]");
 
                if (obj.attr("type") == "checkbox")
                {
                    if ($.type(value) === "boolean")
                    {
                        obj.attr("checked", value);
                    }
 
                    if ($.type(value) === "object")
                    {
                        $.each(value, function (i, item)
                        {
                            $this.find("*[name=" + key + "][value=" + i + "]").attr("checked", item);
                        })
                    }
                }
                else if (obj.attr("type") == "radio")
                {
                    $this.find("*[name=" + key + "][value=" + value + "]").attr("checked", true);
                }
                else
                {
                    obj.val(value);
                }
            })
        }
 
    })(jQuery)


    // 调用方法为 form 赋值
    function setFormData(){
        $("#form").setFormValue({
                "input": "zsw",//input标签
                "textarea": "多行文本",//多行文本
                "select":"2",//选择标签
                "test": {
                    1: true,
                    2: false,
                    3: true
                },//多选框
                "checkboxtest": true,//多选框2
                "radiotest":"2"
        })
    }
</script>
</html>

form.load

$("#表单ID").form('load', {
  bEdp: '001'
});

提交按钮的禁用

<form id="form_dlg_upload" name="form_dlg_upload" action="drawingLog/upload" method="post" enctype="multipart/form-data" target="targetIfr" onSubmit=" return submitUpload()">

function submitUpload(){
    document.form_dlg_upload.submitbtn.disabled = true;
}
document.form_dlg_upload.submitbtn.disabled = false;

手动创建form数据

var formData = new FormData();
formData.append("imgFront",$('#hidupload')[0].files[0]);
formData.append("sampleCode","noFormUploadTest");
formData.append("img","true");
$.ajax({
    headers: {
        "tradeuser":"o-huL5u73__97ihViycOniCmV_eI"
    },
    type: "POST",
    url: "../../tradebe/sampleMain/save",
    contentType: "application/json",
    data: formData,
    processData: false,
    contentType: false,
    async:false,
    success: function (r) {
        console.log('上传图片的响应结果:', r)
    }
});

表单数据数组属性

通过 new FormData() 创建的表单数据不可直接赋值数组类型的属性,例如 formData.append("sampleFilesList", [{...},{...},{...}]) 要通过循环遍历数组将对象数组的每个对象的每个属性逐个赋值,注意下面代码中通过 ${index} 表示数组元素下标。

imgFiles.forEach((value, index) => {
    // 有4个属性的对象构成的对象数组,一次循环中赋值一个对象的4个属性
    formData.append(`sampleFilesList[${index}].category`, value.category)
    formData.append(`sampleFilesList[${index}].isUpload`, value.isUpload)
    formData.append(`sampleFilesList[${index}].filenameRename`, value.filenameRename)
    formData.append(`sampleFilesList[${index}].imgFile`, value.imgFile)
})

类似的,如果 formData 的某个属性是对象,通过下面的方式赋值

let formData = new FormData();
formData.append('main.goodsSid',goodsSid);
formData.append('main.lineIid',lineIid);

这样请求后端 - 后端不可使用 JSON 格式,而要使用模型对象接受

public JsonResult save(SampleWithImg record) throws IOException {
    return JsonResult.ok(service.save(record));
}

function save(){
    var formData = new FormData();
    const imgFiles = [{
        iid: 0,
        category: '正面',
        isUpload: true,
        filenameRename: '正面图片的重命名',
        imgFile: $('#imgFrontFile')[0].files[0]
    },
    {
        category: '背面',
        isUpload: true,
        filenameRename: '背面图片的重命名',
        imgFile: $('#imgBackFile')[0].files[0]
    },    
    {
        category: '细节',
        isUpload: true,
        filenameRename: '细节图片的重命名',
        imgFile: $('#imgDetailFile')[0].files[0]
    }]

    formData.append("sampleCode","imgFileList");
    formData.append("goodsCategory","法兰绒");

    imgFiles.forEach((value, index) => {
        formData.append(`sampleFilesList[${index}].category`, value.category)
        formData.append(`sampleFilesList[${index}].isUpload`, value.isUpload)
        formData.append(`sampleFilesList[${index}].filenameRename`, value.filenameRename)
        formData.append(`sampleFilesList[${index}].imgFile`, value.imgFile)
    })

    console.log(formData)

    $.ajax({
        headers: {
            "tradeuser":"o-huL5u73__97ihViycOniCmV_eI"
        },
        type: "POST",
        url: "/tradebe/sampleMain/save",
        contentType: "application/json",
        data: formData,
        processData: false,
        contentType: false,
        async:false,
        success: function (r) {
            console.log('上传图片的响应结果:', r)
        }
    });
}