java版云笔记(三)

来源:互联网 发布:10月经济数据公布 编辑:程序博客网 时间:2024/06/05 12:03

登录与注册写好了下来就是主页,今天写的是主页加载时笔记本列表的显示,ajax是固定的就不重点说了。主要说一下jQuery.data() 函数和jQuery.on() 函数。
注:这个项目的sql文件,需求文档,需要的html文件,jar包都可以去下载,下载地址为:http://download.csdn.net/download/liveor_die/9985846

笔记列表显示

发送Ajax请求
- 发送事件:笔记本li元素的单击
- 请求参数:笔记本ID
- 请求地址:/note/loadnotes.do

服务器端处理
/note/loadnotes.do
–>LoadNotesController.execute
–>NoteService.loadBookNotes
–>NoteDao.findByBookId
–>cn_note(查询)
–>返回JSON结果

cn_user(用户)
cn_notebook(笔记本,cn_user_id)
cn_note(笔记,cn_notebook_id,cn_user_id)

Ajax回调处理

  • 成功:解析服务器返回的JSON结果,提取
       笔记信息,生成笔记li元素列表
  • 失败:提示加载笔记列表失败

$(function(){
//发送Ajax请求–>服务器端处理–>回调处理
//给li绑定单击(可以给未来元素绑定on)
父元素.on(“事件类型”,子元素,fn处理);
})

加载用户笔记本列表

function loadUserBooks(){//获取Cookie中的userId值    var userId = getCookie("userId");    if(userId==null){//未找到        window.location.href="log_in.html";    }else{//登录过使用userId做其他操作        //1.发送Ajax请求加载笔记本列表        $.ajax({            url:path+"/book/loadbooks.do",            type:"post",            data:{"userId":userId},            dataType:"json",            success:function(result){                if(result.status==0){                    //获取返回的笔记本集合                    var books = result.data;                    //循环集合                    for(var i=0;i<books.length;i++){                        //获取笔记本ID                        var bookId = books[i].cn_notebook_id;                        //获取笔记本名称                        var bookName = books[i].cn_notebook_name;                        //创建一个笔记本列表项<li>元素                        var sli = "";                        sli+='<li class="online">';                        sli+='  <a>';                        sli+='    <i class="fa fa-book" title="online" rel="tooltip-bottom">';                        sli+='    </i>';                        sli+=   bookName;                        sli+='  </a>';                        sli+='</li>';                       var $li = $(sli);//将sli字符串转成jQuery对象li元素                       $li.data("bookId",bookId);//将值与jQuery对象元素绑定                        //将li元素添加到笔记本ul列表区                       $("#book_ul").append($li);                    }                }            },            error:function(){                alert("加载笔记本列表失败");            }        });    }};

其中的jQuery.data() 函数用法

jQuery.data() 函数

data()函数用于在当前jQuery对象所匹配的所有元素上存取数据。
通过data()函数存取的数据都是临时数据,一旦页面刷新,之前存放的数据都将不复存在。

该函数属于jQuery对象(实例)。如果需要移除通过data()函数存放的数据,请使用removeData()函数。

语法
- jQueryObject.data( [ key [, value ] ])

以指定的键名key存取数据。如果指定了value参数,则表示以键名key存放值为value的数据;如果没有指定value参数,则表示读取之前以键名key存放的数据;如果没有指定任何参数,则以对象形式返回之前存储的所有数据。

  • jQueryObject.data( object )

以对象形式同时传入任意多个key-value形式的数据,对象的每个属性就是键名key,属性值就是value。

注意:data()函数的所有”存储数据”操作针对当前jQuery对象所匹配的每一个元素;所有”读取数据”操作只针对第一个匹配的元素。

参数 描述 key 可选/String类型指定的键名字符串。 value 可选/任意类型需要存储的任意类型的数据。 object Object类型指定的对象,用于封装多个键值对,同时存储多项数据。

返回值
data()函数的返回值是任意类型,返回值的类型取决于当前data()函数执行的是”存储数据”操作还是”读取数据”操作。

如果data()函数执行的是”存储数据”操作,则返回当前jQuery对象本身;如果是”读取数据”操作,则返回读取到的数据。

如果当前jQuery对象匹配多个元素,读取数据时,data()函数只以其中第一个匹配的元素为准。

如果执行data(key)函数(仅传入一个参数key)时找不到相应的数据,则返回undefined。如果执行data()函数(不带任何参数)时找不到相应的数据,则返回一个空的对象(没有任何属性)。

主处理

//主处理        $(function(){            //加载用户笔记本列表            loadUserBooks();            //点击笔记本li加载笔记列表(动态绑定)            $("#book_ul").on("click","li",loadBookNotes);        });    </script>

jQuery.on() 函数详解

on()函数用于为指定元素的一个或多个事件绑定事件处理函数。

此外,你还可以额外传递给事件处理函数一些所需的数据。

从jQuery 1.7开始,on()函数提供了绑定事件处理程序所需的所有功能,用于统一取代以前的bind()、 delegate()、 live()等事件函数。

on()支持直接在目标元素上绑定事件,也支持在目标元素的祖辈元素上委托绑定。在事件委托绑定模式下,即使是执行on()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数也对其有效。

  • 该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。

  • 要删除通过on()绑定的事件,请使用off()函数。如果要附加一个事件,只执行一次,然后删除自己,请使用one()函数。

  • 该函数属于jQuery对象(实例)。

语法

用法一:

  • jQueryObject.on( events [, selector ] [, data ], handler )
    用法二:

  • jQueryObject.on( eventsMap [, selector ] [, data ] )

参数

参数 描述 events String类型一个或多个用空格分隔的事件类型和可选的命名空间,例如”click”、”focus click”、”keydown.myPlugin”。 eventsMap Object类型一个Object对象,其每个属性对应事件类型和可选的命名空间(参数events),属性值对应绑定的事件处理函数(参数handler)。 selector 可选/String类型一个jQuery选择器,用于指定哪些后代元素可以触发绑定的事件。如果该参数为null或被省略,则表示当前元素自身绑定事件(实际触发者也可能是后代元素,只要事件流能到达当前元素即可)。 data 可选/任意类型触发事件时,需要通过event.data传递给事件处理函数的任意数据。

handler Function类型指定的事件处理函数。|

  关于参数events中可选的命名空间,请参考最下面的示例代码。

  关于参数selector,你可以简单地理解为:如果该参数等于null或被省略,则为当前匹配元素绑定事件;否则就是为当前匹配元素的后代元素中符合selector选择器的元素绑定事件。

  参数handler中的this指向当前匹配元素的后代元素中触发该事件的DOM元素。如果参数selector等于null或被省略,则this指向当前匹配元素(也就是该元素)。

  on()还会为handler传入一个参数:表示当前事件的Event对象。

  参数handler的返回值与DOM原生事件的处理函数返回值作用一致。例如”submit”(表单提交)事件的事件处理函数返回false,可以阻止表单的提交。

  如果事件处理函数handler仅仅只为返回false值,可以直接将handler设为false。

返回值

  on()函数的返回值为jQuery类型,返回当前jQuery对象本身。

  如果传递了selector参数,那么on()函数并不是为当前jQuery对象匹配的元素绑定事件处理函数,而是为它们的后代元素中符合选择器selector参数的元素绑定事件处理函数。on()函数并不是直接为这些后代元素挨个绑定事件,而是委托给当前jQuery对象的匹配元素来处理。由于DOM 2级的事件流机制,当后代元素selector触发事件时,该事件会在事件冒泡中传递给其所有的祖辈元素,当事件流传递到当前匹配元素时,jQuery会判断是哪个后代元素触发了事件,如果该元素符合选择器selector,jQuery就会捕获该事件,从而执行绑定的事件处理函数。

  通俗易懂地说,如果我们希望给页面上所有的

标签绑定click事件处理函数,我们可以在每个P标签上直接分别绑定click事件处理函数。例如:

// 为所有P元素分别绑定click事件处理函数handler$("p").on("click", handler);

  我们也可以在这些P标签的任意一个公共祖辈元素上绑定事件委托机制,利用DOM的事件冒泡机制来统一委托处理。当我们触发了某个元素的click事件,JS会依次通知该元素及其”父辈”元素、”爷爷辈”元素……直到最顶部的document对象为止,如果这些元素上绑定了click事件处理函数就会依次执行。

// 在body元素上绑定click事件处理函数handler,如果这个click事件是由其后代的P元素触发的,就执行handler$(document.body).on("click", "p", handler);

  在这里的示例中,事件委托机制就是,我们不为每个P元素直接绑定click事件处理函数,而是委托给其某个公共的祖辈元素(此处示例中为document.body),”告诉”他:如果接收到了click事件触发通知,并且这个click事件是由我们这些P元素其中之一触发的,就执行祖辈元素上委托绑定的事件处理函数。

  注意:”focus”、”blur”等部分事件不支持冒泡,使用事件委托机制将无效。不过,他们一般也有对应的支持冒泡的事件。例如与”focus”对应的”focusin”,与”blur”对应的”focusout”。此外,我们也可以使用event.stopPropagation()方法,让当前触发的事件停止冒泡。

原创粉丝点击