《JAVASCRIPT高级程序设计》选择框脚本和富文本编辑

一、选择框脚本

  选择框也是表单的一个字段,是通过<select>和<option>元素来创建的,需要使用javascript来控制。选择框拥有以下的属性和方法:

  以下介绍一些选择框的常用方法:

1、获取选择项

var selectbox = document.forms[0].elements["selectID"];

// 选择第0项的值和文本
var text = selectbox.options[0].text;
var value = selectbox.options[0].value;

//选择选项框某一项的值并显示
var selectedIndex = selectbox.selectedIndex;
var selectedOption = selectbox.options[selectedIndex];
alert("selected index: "+selectedIndex + "\nselected text:"+selectedOption.text+"\nselected value" + selectedOption.value);

// 循环遍历取得每一项的值并返回
function getSelectedOptions(selectbox){
    var result = new Array();
    var option = null;

    for(var i = 0, len = selectbox.options.length; i < len){
        option =selectbox.options[i];
        if(option.selected){
            result.push(option);
        }
    }
    return result;
}

2、增/删/移动

//增:// 使用javascript的dom方式来添加一个option元素(不推荐)
var newOption = document.createElement("option");
newOption.appendChild(document.createTextNode("Option text"));
newOption.setAttribute("value", "option value");

selectbox.appendChild(newOption);

// 使用选择框的add方法来添加一个option元素(推荐)
var newOption = new Option("Option text", "Option value");
selectbox.add(newOption, undefined);
//删:// 使用javascript的dom方法来移除第一个option
selectbox.removeChild(selectbox.options[0]);

// 使用选择框的remove方法来移除第一个option
selectbox.remove(0);

// 清除选择框中的所有项
function clearSelectBox(selectbox){
    for(var i = 0, len = selectbox.options.length; i < len; i++){
        selectbox.remove(i);
    }
}
//移动:// 把某一项向前移动一个位置
var optionToMove = selectbox.options[1];
selectbox.insertBefore(optionToMove, selectbox.options[optionTomove - 1]);

// 把某一项向后移动一个位置
selectbox.insertBefore(optionToMove, selectbox.options[optionTomove +2]);

二、表单序列化

  随着Ajax的出现,表单序列化已经成了一种常见需求。在编写代码前,先来了解一下,浏览器是怎么样将数据发送给服务器的。

  1. 对表单字段的名称和值进行URL编码,并使用和号(&)进行分隔;
  2. 不发送禁用的表单字段;
  3. 只发送勾选的复选框和单选按钮;
  4. 不发送type为“reset”和“submit"的按钮;
  5. 多选框每一个选中的值为一个条目;
  6. 单击提交按钮提交表单时,也会发送提交按钮;否则,不发送提交按钮;也包含type为”image“的图片;
  7. select元素的值,就是选中的option元素的value属性值;如果没有value属性,则为option元素的文本值;

  以下是表单序列化的函数:

function serialize(form){
    var parts = [];
    field = null,
    i,
    len,
    j,
    optLen,
    option,
    optValue;

    for(i=0, len=form.elements.length; i<len; i++){
        field = form.elements[i];

        switch(field.type){
            case "select-one":

            case "select-multiple":
                if(field.name.length){
                    for(j=0, optLen=field.options.length; j<optLen; j++){
                        option = field.options[j];
                        if(option.selected){
                            optValue = "";
                            if(option.hasAttribute){
                                // DOM兼容的浏览器,可以使用hasAttribute方法
                                optValue = (option.hasAttribute("value") ? option.value:option.text);
                            }else{
                                // 兼容IE浏览器
                                optValue = (option.attribute["value"].specified ? option.value:option.text);
                            }
                            parts.push(encodeURIComponent(field.name)+"="+encodeURIComponent(optValue));
                        }
                    }
                }

            case undefined://type属性未定义,则不需要进行序列化

            case "file"://文件输入

            case "submit":

            case "reset":

            case "button"://自定义按钮
                break; //以上按钮和文字输入的字段无法模仿,也不需要序列化

            case "radio"://单选按钮

            case "checkbox"://复选框
                if(!field.checked){
                    break;
                    // 如果单选和复选框的checked属性被设置为false,则不需要序列化
                }

            default;
                if(field.name.length){
                    parts.push(encodeURIComponent(field.name)+"="+encodeURIComponent(field.value));
                }
        }
    }
    return parts.join("&");
}

三、富文本编辑

  富文本编辑,又称WYSIWYG(what you see is what you get,所见即所得)。javascript通过以下两种方式,实现了在网页中编辑文本内容。

1、使用iframe让加载的iframe的内容可编辑

  新建一个index.html:

<!doctype html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        hello world
    </body>
</html>

  在建立一个html并执行(把这两个html都放在同一个域下,这里把这两个文件都放在本地的服务器上的):

<!doctype html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <iframe name="richEdit" style="height:400px;width:400px;" src="http://127.0.0.1/index.html" frameborder="2"></iframe>
        <script>
        // 要让iframe的内容可编辑,需要将designMode属性设置为on
            window.addEventListener("load", function(){
                frames["richEdit"].document.designMode = "on";
            });
        </script>
    </body>
</html>

2、使用contentEditable属性让div可编辑

<!doctype html>
<html>
<head>
    <title></title>
</head>
<body>
    <!-- 为元素设置contenteditable属性 -->
    <div id="richedit" contenteditable>1111</div>
    <script>
    var div = document.getElementById("richedit");
    // 将属性开关打开
    div.contentEditable = "true";
    </script>
</body>
</html>
时间: 2024-12-28 09:26:25

《JAVASCRIPT高级程序设计》选择框脚本和富文本编辑的相关文章

JavaScript高级程序设计之动态脚本及动态样式

1.动态加载脚本(src 原理,异步,支持跨域) var loadScript = function (url, callback) { var script = document.createElement("script"); script.src = url; document.getElementsByTagName("head")[0].appendChild(script); if (script.addEventListener) { // for w

JavaScript高级程序设计--表单脚本

1.提交表单 submit onsubmit 2.表单的change事件 input与textarea元素的change事件触发在,他们失去焦点且value值改变的时候 select的change事件发生在选项改变的时候 3.选中文本select()与获取选中的文本 在文本框获得焦点的时候默认选中其中所有文本,用以提高用户体验. if(window.getSelection){//现代浏览器userSelection=window.getSelection(); }elseif(document

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

JavaScript高级程序设计第14章表单脚本 (学习笔记)

第十四章 表单脚本 1.阻止默认表单提交 1.提交表单数据 1.使用type=submit提交按钮 2.使用submit():方法 注意:当用户点击提交按钮时,会触发submit事件,从而在这里我们有机会验证数据并决定要不要提交表单 1.preventnDefault(event):可以用在表单数据无效时不发给服务器,对于动态绑定的onclick 事件. 2.Submit()方法也可以提交表单,但是不会触发submit事件,所以在使用时须先验证表单数据, 如:<%response.write(t

《JavaScript高级程序设计》Chapter 14 表单脚本

之前就提到了,JS创建之初是为了减少服务器的压力,而当时这个压力主要体现在表单的验证上.与此同时,JS还为WEB表单增加了一些行为. 表单基础知识 go 文本框脚本 go 选择框脚本 go 表单序列化 go 富文本编辑 go JS表单基础知识 JS中获取表单元素(<form>)的方法: 通过id(所有元素通用)getElementById(""); 通过document.form:document.forms[0] 或者 document.forms["formN

JavaScript高级程序设计(十五)

表单脚本 通过点击提交按钮提交表单时,浏览器会在将请求发送给服务器之前触发submit事件.这样,我们就有机会验证表单数据,并据以决定是否允许表单提交.阻止这个事件的默认行为就可以取消表单提交. 在JavaScript中,以编程方式调用submit()方法也可以提交表单,以编程方式提交表单时,不会触发submit事件,因此要记得在调用此方法之前先验证表单数据. 提交表单时可能出现的最大问题,就是重复提交表单.解决这一问题的办法有两个:在第一次提交表单后就禁用提交按钮,或者利用onsubmit事件

JavaScript高级程序设计(第3版) 中文pdf扫描版 89M 高清下载

<JavaScript高级程序设计(第3版)>是JavaScript超级畅销书的最新版.ECMAScript5和HTML5在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript增添了很多适应未来发展的新特性. <JavaScript高级程序设计>这一版除增加5章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一. 全书从JavaScript语言实现的各个组成部分——语言核心.DOM.BOM.事件模型讲起,深入浅出地探讨了面向对象

再看《JavaScript高级程序设计》第13、14、17、20-25章

第十三章 事件 1.事件流:描述的是从页面中接收事件的顺序 1)事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点 2)事件捕获:事件开始时由不太具体的节点接收,然后逐级向下传播到最具体的元素 3)DOM事件流:经历三个阶段——事件捕获阶段.处于目标阶段和事件冒泡阶段 2.事件处理程序:事件是用户或浏览器自身执行的某种动作,响应某个事件的函数就是事件处理程序 1)HTML事件处理程序:将事件处理程序设置为 null 就可以删除该事件处理程序. 2)DOM0级事件处理程序:

《JavaScript高级程序设计》第14、17、20章

第十四章 表单脚本 1.表单的基础知识 1)HTMLFormElement类型的属性和方法 acceptCharset:服务器能够处理的字符集 action:接收请求的URL,等价于HTML中的action特性: elements:表单中所有控件的集合: encype:请求的编码类型,等价于HTML中的enctype特性: length:表单中控件的数量: method:要发送的HTTP请求类型,通常是“get”或“post”,等价于HTML中的method特性: name:表单的名称,等价于H