js-G3

2018-08-03  本文已影响0人  mytao4032

文档节点是每个文档的根节点,html中 文档节点只有一个子节点,及<html>元素

我们称之为文档元素,每个文档只能有一个文档元素,

在XML中没有定义的元素,因此任何元素都可能成为文档元素

js中的所有节点类型都继承自Node类型,因此所有节点类型偶读共享着相同的基本属性和方法

for (var  i = 0; i = values.length; i++) {
    //要避免这种频繁操作
    ul.innerHTML += "<li>" + values[i] + "</li>";
}

每次循环都设置innerHTML的做法效率很低

最好的做法是单独构建字符串,然后再一次性将及结果字符串赋值给

innerHTML

var  ite = "";
for (var  i = 0; i = values.length; i++) {
    ite += "<li>" + values[i] + "</li>";
}
ul.innerHTML = ite;

contains()方法;

检测某个节点是不是另一个节点的后代:

alert(document.getElement.contains(document.body)); //true;

13 事件:

BOM 浏览器对象模型

DOM 文档对象模型

事件是用户或浏览器自身执行的某种动作

事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码

通过html指定事件处理程序:

1,耦合

2,未加载完点击不起作用

2,不同浏览器中有不同的作用域链

要使用js指定事件处理程序,,首先必须取得一个要操作的对象的引用

var btn = document.getElementById('btn')
btn.onclick = function () {
    alert('clecked')
}

DOM2级事件 定义了两个方法,用于处理指定和删除事件处理程序的操作:

addEventListener() 和 removeEventListener() 所有DOM节点中都包含着两个方法,并且他们都接受3个参数:

要处理的事件名,作为事件处理程序的函数,一个布尔值(true:在捕获阶段调用时间处理程序,false:在冒泡阶段调用事件处理程序)

var btn = document.getElementById('‘btn’');
btn.addEventListener('‘click’', function () {
    alert('“btn-click”')
}, false);

通过addEventListener() 添加的事件处理程序 只能使用removeEventListener() 来移除;移除是传入的参数与添加处理程序事件时使用的参数相同.

//添加

var btn = document.getElementById('‘btn’');
btn.addEventListener('‘click’', function () {
    alert('“btn-click”')
}, false);

//移除

var btn = document.getElementById('‘btn’');
btn.removeEventListener('‘click’', function () {
    alert('“btn-click”')
}, false); //无效

注:因为是匿名函数,参数不是同一个 ,所以第二个参数不同

var btn = document.getElementById('‘btn’');

//定义函数

var handle = function () {
    alert('“btn - click”')
};

btn.addEventListener('‘click’', handle, false);
//这样移除是有效的
btn.removeEventListener('‘click’', handle, false);
大多数情况下,都是将事件处理程序添加到事件流的冒泡阶段(后面false)

跨浏览器方式处理事件:

var  EvnetUtil  = {
    addHandle:   function  (element, type, handler) {
        if (element.addEventListener) {
            Element.addEventListener(type, handler, false);
        } else 
            if  (element.attachEvent) {
                Element.attachEvent('on'  + type, handler);
            } else  {
                Element['on'  + type] = handler;
            }
    },
    removeHandler:   function  (element, type, handler) {
        if (element.removeEventListener) {
            Element.removeEventListener(type, handler, false);
        } else 
            if  (element.detachEvent) {
                Element.detachEvent('on'  + type, handler);
            } else  {
                Element['on'  + type] = null;
            }
    }
}

事件对象:

在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息

在需要通过一个函数处理多个事件时,可以使用tyoe属性

var  btn  = document.getElementById('btn');
var  handler  = function  (event) {
    switch  (event.type) {
        case  'click':
            alert('clecked');
            break;
        case  'mouseover':
            event.target.style.backgroundColor  = 'red';
            break;
        case  'mouseout':
            event.target.style.backgroundColor  = '';
            break;
    }
}
btn.onclick  = handler;
btn.onmouseover  = handler;
btn.onmouseout  = handler;

这个例子定义了一个handler函数 用于处理3种事件,

StopPropagation()方法用于立即停止事件在DOM层次中的传播

var  btn  = document.getElementById('btn');
btn.onclick  = function  (event) {
    alert('clicked');
    event.stopPropagation();
}
document.body.onclick  = function  (event) {
    alert('bodyClicked');

此处如果不加stopPropagation 事件将冒泡到body

UI事件:

Load,unload,abort,error,select,resize,scroll

Load

EventUtill.addHandler(window,’load’function(){})

鼠标与滚轮事件:

Hashchange事件:

两个属性 oldUrl newUrl

EventUtil.addHandler(window, 'hashchange', function (event) {

    Alert('Old URL: ' + event.oldURL + '\nNew URL:' + event.newURL);

})

考虑兼容性 最好使用 local.hash

事件委托:减少页面绑定事件

<ul id ='myLinks'>
    <li id='goSomething'>qwe</li>
    <li id='doSomewhere'>qwe</li>
    <li id='sayHi'>qwe</li>
</ul>
var  list  = document.getElementById('myLinks');
EvnetUtil.addHandle(list, 'click', function (event) {
    event  = EventUtil.getEvent(event);
    var  target  = EventUtil.getTaget(event);
    switch  (target.id) {
        case  'doSomething':
            document.title  = 'asdasda'
            break;
        case  'goSomewhere':
            location.href  = 'qweq';
        case  'sayHi':
            alert('hi')
            break;
    }
})

表单的基础知识:

var form = document.getElementByTd('form1');

通过document.forms可以取得页面中所有的表单

var firstForms = document.forms[0]; //取得页面中的第一个表单
var myForms = document.forms['form2']; //取得页面中名称为”form2”的表单

表单提交:

用户点击提交按钮或图像按钮时,就会提交表单

使用 <input>或<button> 都可以定义提交按钮,只要其type特性的值设置为”submit”即可

而图像按钮则是通过将<input>的type特性设置为<image>来定义的

//通用提交按钮
<input type="submit" value="Submit Form">
//自定义提交按钮
<button type="submit">Submit Form</button>
//图像提交按钮
<input type="image" src="sub.gif">

在js中以编程方式调用submit();

var form = document.getElementById('myFormF');
//提交表单
Form.submit();
 

表单提交最大的问题是:重复提交表单;

在第一次提交表单后就禁用用户提交
用onsubmit事件处理程序取消后续的表单提交操作
重置表单:

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

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

表单字段:

每个表单都有elements属性,改属性是表单中所有表单元素(字段)的集合是一个有序列表,

var  form  = document.getElementById('form1');
//取得表单中的第一个字段
var  field1  = form.element[0];
//取得名为'textbox1'的字段
var  field2  = form.element['textbox1'];
//取得表单中包换的字段数量
var  fieldCount  = form.element.length;
应尽量使用 elements 来查询表单

共有的表单字段属性:

Disabled:布尔值,表示单签字段是否被禁用

Form;指向当前字段所属表单的指针,只读

name:当前字段的名称

radOnly:布尔值,表示当前字段是否只读

tanIndex:表示当前字段的切换(tab)序号,

type:当前字段的类型,checkbox radio 等等

value: 当前字段将被提交给服务器的值,

//避免多次提交表单:

EventUtil.addHandle(form, 'submit', function  (event) {
    event  = EventUtil.getEvent(event);
    var  target  = EventUtil.getTaget(event);
    //取得提交按钮
    var  btn  = target.elements['submit-btn'];
    //禁用它
    btn.disabled  = true;
})

共有的表单字段方法:

focus() blur()

上一篇 下一篇

猜你喜欢

热点阅读