찾다
웹 프론트엔드JS 튜토리얼JavaScript 양식 스크립트 소개

JavaScript 양식 스크립트 소개

Aug 09, 2017 pm 02:17 PM
javascriptjs소개

사람들이 처음 JavaScript를 사용하기 시작했을 때 주요 목적 중 하나는 양식 유효성 검사와 양식 처리에 대한 서버의 책임을 공유하는 것이었습니다. 많이 사용되는 제출 방법은 대부분 ajax를 통해 이루어지지만, 양식을 이해하는 것도 ajax 방법에 큰 도움이 됩니다! 그러므로 형태를 과소평가하지 마십시오.

1. 양식에 대한 기본 지식

HTML에서는 양식이 요소로 표현되지만 JavaScript에서는 양식이 HTMLFormElement 유형에 해당합니다.
테이블 HTMLFormElement 속성 및 메서드

속성 또는 메서드 함수 설명
acceptCharset 서버가 처리할 수 있는 문자 집합. HTML의 accept-charset 기능과 동일
action 요청된 URL을 수신합니다. HTML의 작업 속성과 동일합니다.
elements 양식의 모든 컨트롤 모음(HTMLCollection)
enctype 요청의 인코딩 유형입니다. HTML enctype 속성
length 양식의 컨트롤 수
method 전송할 HTTP 요청 유형. HTML 메서드 속성
name 이름 양식; HTML의 이름 속성과 동일
reset() 모든 양식 필드를 기본값으로 재설정
submit() 양식 제출
target 에 사용된 창의 이름 요청을 보내고 응답을 받습니다. HTML의 대상 기능과 동일합니다

1. <form></form> 요소를 가져옵니다

방법 1: GetElementById(요소 ID)

var form = document.getElementById("form1");1

방법 2: document.forms를 통해 페이지의 모든 양식을 가져온 다음 숫자 인덱스를 통해 해당 양식을 가져옵니다

var firstForm = document.forms[0];1

방법 3 : document.forms를 통해 가져옵니다. 페이지의 모든 양식을 가져온 다음 페이지의 양식 이름으로 해당 양식을 가져옵니다.

var myForm = document.forms["form2"];1

방법 4: 초기 브라우저는 name 속성을 사용하여 각 양식을 문서의 속성으로 저장합니다. object [이 방법은 사용하지 않는 것이 좋습니다]

var myFormf = document.form2;1

2 . 제출 양식

(1) 제출 버튼 제출
방법 1: 범용 제출 버튼

<input type="submit" value="Submit Form" />1

방법 2: 맞춤 제출 버튼

<button type="submit">Submit Form</button>1

방법 3: 이미지 버튼

<input type="image" value="submitBtn.gif" />1

위에 나열된 항목 중 하나라도 양식 버튼에 있으면 해당 양식 컨트롤에 포커스가 있을 때 Enter 키를 눌러 양식을 제출할 수 있습니다. (텍스트 영역 제외. 텍스트 영역에 캐리지 리턴을 입력하면 새 줄이 생성됩니다.) 양식에 제출 버튼이 없으면 Enter 키를 눌러도 양식이 제출되지 않습니다.
Note 위의 방법으로 양식을 제출하면 브라우저는 서버에 요청을 보내기 전에 submit 이벤트를 트리거합니다.
이렇게 하면 양식의 유효성을 검사해야 하는지 결정할 수 있습니다. 이 이벤트의 기본 동작을 차단하면 양식 제출이 취소됩니다.

<form action="http://www.baidu.com">    <input id="name"/>    <button type="submit">Submit Form</button></form><script type="text/javascript">    var form = document.forms[0];
    form.addEventListener("submit", function(event) {        var name = document.getElementById("name");        if(name.value === "") {
            event.preventDefault();
        }
    });</script>12345678910111213

Additional: Enter를 통한 양식 제출을 비활성화하려면 [Enter를 입력하여 양식 제출을 방지하는 HTML]

(2) JavaScript로 제출

var form = document.forms[0];form.submit();12

참고을 참조하세요. 이 방법은 실행되지 않습니다. 제출 이벤트.

폼 제출 시 발생할 수 있는 가장 큰 문제는 폼을 반복해서 제출하는 것입니다.
해결책:
(1) 처음으로 양식을 제출한 후 제출 버튼을 비활성화합니다.
'클릭' 이벤트 핸들러 함수가 아닌 '제출' 이벤트 핸들러 함수에서 처리해야 합니다. 일부 브라우저는 클릭 이벤트가 트리거되기 전에 제출 이벤트를 트리거하기 때문입니다!
(2) 후속 양식 제출 방법을 취소하려면 onsubmit 이벤트 핸들러를 사용하십시오.

저희 프로젝트에서는 ajax를 통해 요청을 제출하는데, 반복 제출을 방지하는 방법은 위의 (2)와 대략 유사합니다. 전송, 전송 성공 및 전송 프로세스 완료 전에 ajax를 가로채고 상태 머신을 사용하여 현재 상태(로드, 다시 제출, 성공, 오류)를 식별합니다. 사용자가 ajax를 요청하면 현재 어떤 상태인지 확인합니다.

  • 초기 상태가 null이면 요청이 직접 전송되고 상태가 로드 중으로 전환됩니다.

  • 로드 중이거나 다시 제출되는 경우 "요청을 처리 중입니다"라는 메시지가 표시되고 요청을 반복하지 마십시오"라는 메시지가 표시되고 상태를 다시 제출로 전환합니다.

  • 성공 또는 오류인 경우 "성공 또는 실패"라는 메시지가 표시된 다음 상태를 복원으로 변경합니다. 초기 상태.

3. 재설정 양식

(1) 재설정 버튼 제출
방법 1: 범용 재설정 버튼

<input type="reset" value="Reset Form" />1

방법 2: 사용자 정의 재설정 버튼

<button type="reset">Reset Form</button>1

참고, 위 방법을 통해 양식을 재설정하면 브라우저가 재설정 이벤트를 트리거합니다. 이 이벤트의 기본 동작을 차단하면 재설정 제출이 취소됩니다.

<form action="http://www.php.cn">    
<input id="name"/>    
<button type="submit">Submit Form</button>    
<button type="reset"> Reset Form</button>
</form>
<script type="text/javascript">   
 var form = document.forms[0];
    form.addEventListener("reset", function(event) {
        alert("我就不让你重置,咋地!");
        event.preventDefault();
    })</script>123456789101112

(2) JavaScript

var form = document.forms[0];form.reset();12

참고에서 재설정하면 이 메서드는 재설정 이벤트를 트리거하지 않습니다.

4. 양식 필드

  • form.elements, 양식의 모든 컨트롤 컬렉션을 가져옵니다(HTMLCollection).

  • form.elements[n]; //n+1번째 요소 반환

  • form.elements["name"] //이름 값이 "name"인 NodeList 반환

<form action=" 
<input id="name" name="name"/>
<input type="radio" name="color" value="red"/>Red
<input type="radio" name="color" value="green"/>Green
<input type="radio" name="color" value="blue"/>Blue
<button type="submit">Submit Form</button>
<button type="reset"> Reset Form</button>
</form>
<script type="text/javascript">var form = document.forms[0];
form.elements[1] === form.elements["color"][0];// value值为red的input标签</script>123456789101112

( 1 ) 양식 필드 속성

Attribute 함수 설명
disabled 현재 필드가 비활성화되었는지 여부를 나타내는 부울 값
form 현재 필드가 포함된 양식에 대한 포인터 읽기 전용
name 현재 필드의 이름
readOnly 현재 필드가 읽기 전용인지 여부를 나타내는 부울 값
tabIndex 전환(탭)을 나타냅니다. 현재 필드의 시퀀스 번호
type 현재 필드의 유형
value 서버에 제출되는 현재 필드의 값입니다. 파일 필드의 경우 이 속성은 읽기 전용이며 컴퓨터
에 있는 파일 경로를 포함합니다.

(2)表单字段方法

  • foucs()获取焦点,激活字段,使其可以响应键盘事件

  • blur()失去交单。

window.addEventListener("load", function() {
   document.forms[0].elements[0].focus();   // 让表单第一个元素获取焦点});123

HTML5中表单字段新增了autofoucs属性。

<input type="text" autofoucs />1

(3)表单字段事件

  • blur:当前字段失去焦点触发

  • change:对于和元素,在它们失去焦点且value值改变时触发;对于元素,在其选项改变时触发。

  • focus:当前字段获取焦点时触发

表单错误提示流程:利用focus事件修改文本框的背景颜色,以便清楚表明这个字段获取了焦点;利用blur事件恢复文本框的背景颜色;利用change事件在用户输入了非规定字符时提示错误。
在项目中的validate插件,只用到了blur和focus事件。因为某些浏览器中,blur事件会先于change事件;有些会恰好相反!

二、文本框脚本

HTML中,有两种方式表示文本框:单行文本框<input type="text">、多行文本框<textarea></textarea>
(1)单行文本框
通过设置size特性,可以指定文本框中能够显示的字符数;通过设置value特性,可以指定文本框的初始值;通过设置maxlength特性,可以指定文本框可以接受的最大字符数。

<!-- 显示5个字符(input 元素的宽度),输入不能超过10个字符--><input type="text" value="初始值放到这里" size="5" maxlength="10"/>12

(2)多行文本框
rows设置文本框行数,cols设置文本框列数。

<textarea cols="10" rows="5">初始值必须放在这里</textarea>1

上述两种文本框,都会将用户输入的内容保存在value属性中!!!

1. 选择文本

(1)选择(select)事件
选择文本框中所有文本select()方法,对应的是一个select事件,同样存在触发时间的问题!

var input = document.getElementById("name");
input.addEventListener("focus", function(event) {    event.target.select();
});1234

(2)取得选择的文本

var textarea = document.getElementById("content");textarea.addEventListener("select", function(event) {
if(typeof textarea.selectionStart === "number") {
console.log(textarea.value.substring(textarea.selectionStart, textarea.selectionEnd));}else if(document.selection){
// IE下
console.log(document.selection.createRange().text);}
});123456789

(3)选择部分文本
setSelectionRange(要选择的第一个字符索引, 要选择的最后一个字符索引)
注意要看到被选择的文本,必须在调用setSelectionRange()之前或之后立即将焦点设置到文本框。

function selectText(textbox, startIndex, endIndex) {    if(textbox.setSelectionRange) {
        textbox.setSelectionRange(startIndex, endIndex);
    } else if(textbox.createTextRange) {        var range = textbox.createTextRange();        range.collapse(true);        range.moveStart("character", startIndex);        range.moveEnd("character", endIndex - startIndex);        range.select();
    }    // 将焦点设置到文本框上
    textbox.focus();
}12345678910111213

部分选择文本的技术在实现高级文本输入框时很有用,例如提供自动完成建议的文本框就可以使用这种技术。

2. 过滤输入

(1)屏蔽字符
当需要用于输入的文本中不能包含某些字符时,例如手机号,只能输入字符!

var input = document.getElementById("name");
input.addEventListener("keypress", function(event) {    if(!/\d/.test(String.fromCharCode(event.charCode)) && event.charCode > 9 && !event.ctrlKey) {        // 只允许输入数字和退格特殊键以及Ctrl        event.preventDefault();
    }
});1234567

更极端的方式,可以通过event.preventDefault();阻止其默认行为来禁止按键操作,即文本框只读!!
(2)操作剪贴板

var EventUtil = {
    getClipboardText: function(event){        var clipboardData =  (event.clipboardData || window.clipboardData); // 兼容IE        return clipboardData.getData("text");
    },
    setClipboardText: function(event, value){        if (event.clipboardData){            event.clipboardData.setData("text/plain", value);
        } else if (window.clipboardData){   // 兼容IE
            window.clipboardData.setData("text", value);
        }
    }
};var input = document.getElementById("name");
input.addEventListener("paste", function(event) {    var data = event.clipboardData.getData("text");
    console.log(data);    if(!/^\d*$/.test(data)) {        // 只允许粘贴数字        event.preventDefault();
    }
});1234567891011121314151617181920212223

3. 自动切换焦点

用户填写完当前字段时,自动将焦点切换到下一个字段。

<p>Enter your telephone number:</p><input type="text" name="tel1" id="txtTel1" size="3" maxlength="3" ><span>-</span><input type="text" name="tel2" id="txtTel2" size="3" maxlength="3" ><span>-</span><input type="text" name="tel3" id="txtTel3" size="4" maxlength="4" >123456
(function(){    
    function tabForward(event){            
        event = EventUtil.getEvent(event);
        var target = EventUtil.getTarget(event);
        if (target.value.length == target.maxLength){
            var form = target.form;        
            for (var i=0, len=form.elements.length; i < len; i++) {
                if (form.elements[i] == target) {
                    if (form.elements[i+1]){
                        form.elements[i+1].focus();
                    }
                    return;
                }
            }
        }
    }

    var textbox1 = document.getElementById("txtTel1"),
        textbox2 = document.getElementById("txtTel2"),
        textbox3 = document.getElementById("txtTel3");

    EventUtil.addHandler(textbox1, "keyup", tabForward);        
    EventUtil.addHandler(textbox2, "keyup", tabForward);        
    EventUtil.addHandler(textbox3, "keyup", tabForward);            })();12345678910111213141516171819202122232425

4. HTML5约束验证API

(1)必填字段:<input type="text" required>
(2)特殊输入类型:<input type="email | url">
(3)数值范围:<input type="number" min="0" max="10">
(4)输入模式:<input type="text" pattern="\d+">注意,模式的开头和末尾不用加^和$符合(默认已经有了)
(5)检测有效性:checkValidatity()
(6)禁用验证:

<!-- 整个表单不进行验证 --><form method="post" action="" novalidate ><!-- 某个按钮提交不必验证表单--><input type="submit" formnovalidate name="btnNoValidate" />1234

三、选择框脚本

<select></select><option></option>元素创建
HTMLSelectElement的属性和方法:

属性和方法 作用说明
add(newOption, relOption) 向控件中插入新项,其位置在相关项relOption之前
multiple 是否支持多项选择
options 所有项集合
remove(index) 移除给定位置的选项
selectIndex 基于0的选中项的索引,如果没有选中项,则该值为-1;对于支持多选的控件,只保存选中项的第一项索引
size 选择框中可见的行数

HTMLOptionElement的属性和方法:

属性和方法 作用说明
index 当前选项在options集合中的索引
label 当前选项的标签
selected 当前选项是否被选中
text 选项的文本
value 选项的值
<form method="post" action="" id="myForm">
    <label for="selLocation">Where do you want to live?</label>
    <select name="location" id="selLocation">
        <option value="Sunnyvale, CA">Sunnyvale</option>
        <option value="Los Angeles, CA">Los Angeles</option>
        <option value="Mountain View, CA">Mountain View</option>
        <option value="">China</option>
        <option>Australia</option>
    </select>
</form>12345678910
// 选择上述每个选项后,value值分别为:["Sunnyvale, CA", "Los Angeles, CA", "Mountain View, CA", "", "Australia"]
document.getElementById("selLocation").value; // 获得第一个选项的文本和值
document.forms[0].elements["location"].options[0].text;document.forms[0].elements["location"].options[0].value;12345

(1)展示规则:有value属性且值不为空,则展示value属性的值;否则展示该项的文本值。
(2)value值规则:有value属性(不管是否为空),获得的都是对应value属性的值;否则为该项文本值。

1. 选择选项

function getSelectedOptions(selectbox){    var result = new Array();    var option = null;    for (var i=0, len=selectbox.options.length; i < len; i++){
        option = selectbox.options[i];        if (option.selected){
            result.push(option);
        }
    }    return result;            
}12345678910111213

2. 添加选项

(1)DOM方式

var newOption = document.createElement("option");newOption.appendChild(document.createTextNode("Option text"));newOption.setAttribute("value", "Option value");selectbox.appendChild(newOption);1234

(2)Option构造函数

var newOption = new Option("Option text", "Option value");
selectbox.appendChild(newOption);12

(3)选择框的add方法(最佳方案)

var newOption = new Option("Option text", "Option value");
selectbox.add(newOption, undefined);    // 插入到最后12

3. 移除选项

(1)DOM方

selectbox.removeChild(selectbox.options[0]);1

(2)选择框的remov

selectbox.remove(0);1

(3)将相应的选项设置为null(遗留机制)

selectbox.options[0] = null;1

4. 移动和重排选项

DOM的appendChild方法(只能添加到最后),如果appendChild传入一个文档中已有的元素,那么就会先从该元素的父节点中移除它,再把它添加到指定的位置。

// 将第一个选择框中的第一个选项移动到第二个选择框中
var selectbox1 = document.getElementById("selLocations1"),
    selectbox2 = document.getElementById("selLocations2");selectbox2.appendChild(selectbox1.options[0]);  1234

DOM的insertBefore方法

// 将选择框中的选项向后移动一个位置
var optionToMove = selectbox.options[selectbox.options.length - 1]; selectbox.insertBefore(optionToMove, selectbox.options[0]);123

四、表单序列化

  • 对表单字段的名称和值进行URL编码,使用“&”分隔;

  • 不发送禁用的表单字段;

  • 只发送勾选的复选框和单选按钮;

  • 不发送type为“reset”和“button”的按钮;

  • 选择框中每个选中的值单独条目发送;

五、富文本编辑

contenteditable:用户立即可编辑该元素

data:text/html, <html contenteditable>1

위 내용은 JavaScript 양식 스크립트 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
JavaScript의 진화 : 현재 동향과 미래 전망JavaScript의 진화 : 현재 동향과 미래 전망Apr 10, 2025 am 09:33 AM

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

Demystifying JavaScript : 그것이하는 일과 중요한 이유Demystifying JavaScript : 그것이하는 일과 중요한 이유Apr 09, 2025 am 12:07 AM

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

Python 또는 JavaScript가 더 좋습니까?Python 또는 JavaScript가 더 좋습니까?Apr 06, 2025 am 12:14 AM

Python은 데이터 과학 및 기계 학습에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명하며 데이터 분석 및 웹 개발에 적합합니다. 2. JavaScript는 프론트 엔드 개발의 핵심입니다. Node.js는 서버 측 프로그래밍을 지원하며 풀 스택 개발에 적합합니다.

JavaScript를 어떻게 설치합니까?JavaScript를 어떻게 설치합니까?Apr 05, 2025 am 12:16 AM

JavaScript는 이미 최신 브라우저에 내장되어 있기 때문에 설치가 필요하지 않습니다. 시작하려면 텍스트 편집기와 브라우저 만 있으면됩니다. 1) 브라우저 환경에서 태그를 통해 HTML 파일을 포함하여 실행하십시오. 2) Node.js 환경에서 Node.js를 다운로드하고 설치 한 후 명령 줄을 통해 JavaScript 파일을 실행하십시오.

Quartz에서 작업이 시작되기 전에 알림을 보내는 방법은 무엇입니까?Quartz에서 작업이 시작되기 전에 알림을 보내는 방법은 무엇입니까?Apr 04, 2025 pm 09:24 PM

쿼츠 타이머를 사용하여 작업을 예약 할 때 미리 쿼츠에서 작업 알림을 보내는 방법 작업의 실행 시간은 CRON 표현식에 의해 설정됩니다. 지금...

JavaScript에서 생성자의 프로토 타입 체인에서 함수의 매개 변수를 얻는 방법은 무엇입니까?JavaScript에서 생성자의 프로토 타입 체인에서 함수의 매개 변수를 얻는 방법은 무엇입니까?Apr 04, 2025 pm 09:21 PM

JavaScript 프로그래밍에서 JavaScript의 프로토 타입 체인에서 함수 매개 변수를 얻는 방법 프로토 타입 체인의 기능 매개 변수를 이해하고 조작하는 방법은 일반적이고 중요한 작업입니다 ...

Wechat Mini 프로그램 웹 뷰에서 Vue.js 동적 스타일 변위가 실패한 이유는 무엇입니까?Wechat Mini 프로그램 웹 뷰에서 Vue.js 동적 스타일 변위가 실패한 이유는 무엇입니까?Apr 04, 2025 pm 09:18 PM

WeChat 애플릿 웹 뷰에서 vue.js를 사용하는 동적 스타일 변위 실패가 vue.js를 사용하는 이유를 분석합니다.

TamperMonkey에서 여러 링크에 대한 동시 GET 요청을 구현하고 순서대로 반환 결과를 결정하는 방법은 무엇입니까?TamperMonkey에서 여러 링크에 대한 동시 GET 요청을 구현하고 순서대로 반환 결과를 결정하는 방법은 무엇입니까?Apr 04, 2025 pm 09:15 PM

동시 링크에 대한 요청을 여러 링크와 순서대로 판단하여 결과를 반환하는 방법은 무엇입니까? 탬퍼 몬키 스크립트에서는 종종 여러 체인을 사용해야합니다 ...

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기