jQuery-关于事件(可编辑表格,自定义表格,对话,模拟抽奖)

jQuery中的事件会比js中简单的多,基本上都是js封装好的函数,我们直接调用就可以了,看了下最近写的东西,感觉都是基本的知识,有一点索然无味,所以准备改变画风,所有的知识点,都整理在思维导图里,然后正文添加案例帮助我们更好的消化知识,既然还有人选择看我的小文章,是对我大大的鼓励,那我就要不断努力呀!
老规矩,诺,给你图

事件.png

今天准备的小案例,温习以前的知识,巩固今天的内容,同时也会加深对jQuery的认识。

一、表格操作

表格操作.gif

思路与难点:
1.我们先创建一个隐藏的一行,然后点击添加的时候,直接将其插入进来;
2.点击修改的时候需要给每个td添加一个可以编辑的input标签;
3.点击保存时获取input的val值,同时去掉input;
4.删除时删除整个删除按钮所在的tr;
看代码(页面搭建样式部分简写,忽略格式)

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
    <style type="text/css">
    tr{height: 20px;width: 300px;}
    td{width: 150px;}
    .hid{display: none;}
    </style>
</head>
<body>
<table border="1px" cellspacing="0">
    <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>操作</th>
    </tr>
    <tr>
        <td>1</td>
        <td>tom</td>
        <td>18</td>
        <td>男</td>
        <td>
            <button class="add">添加</button>
            <button class="update">修改</button>
            <button class="del">删除</button>
        </td>
    </tr>
    <tr>
        <td>2</td>
        <td>jone</td>
        <td>28</td>
        <td>男</td>
        <td>
            <button class="add">添加</button>
            <button class="update">修改</button>
            <button class="del">删除</button>
        </td>
    </tr>
    <tr>
        <td>3</td>
        <td>lily</td>
        <td>21</td>
        <td>女</td>
        <td>
            <button class="add">添加</button>
            <button class="update">修改</button>
            <button class="del">删除</button>
        </td>
    </tr>
    <tr class="hid">
        <td></td>
        <td><input type="text"></td>
        <td><input type="text"></td>
        <td><input type="text"></td>
        <td>
            <button class="add">添加</button>
            <button class="update">修改</button>
            <button class="del">删除</button>
        </td>
    </tr>
</table>

<script type="text/javascript" src="jquery/jquery-3.0.0.min.js"></script>
<script type="text/javascript">
function resetIndex(){
//计算序号
    $("tr>td:first-child").each(function(index,element){
        $(this).html(index+1)
    })
}
//点击添加
$(".add").click(function(){
    //01 克隆
    var $tr = $(".hid").clone(true);
    //disply=block
    $tr.removeClass("hid");
    //把修改按钮的值为保存
    $tr.find("button:contains(修改)").html("保存");
    //02 after()
    $(this).closest("tr").after($tr);
    resetIndex();
})
//点击修改
$(".update").click(function(){
    //可操作的全部区域
    var $tds = $(this).parents("tr").children("td").not(":first,:last");
    //点击修改按钮的时候,先判定是修改还是保存
    var $content = $(this).html();
    if ($content=="修改") {
    //如果是修改,给每个操作的td添加一个input标签     
        $tds.each(function(){
            $(this).html("<input type='text' value='"+$(this).html()+"'>")
        });
        $(this).html("保存")
    }else{
    //如果是保存,将修改的内容保存下来
        $tds.each(function(){
            var contentIn= $(this).children("input").val()
            $(this).html(contentIn);
        });
        $(this).html("修改")
    }
})
//点击删除
$(".del").click(function(){
    $(this).parents("tr").remove();//将对应的一行删除
    resetIndex();
})
</script>

</body>
</html>

二、对话

对话效果图.gif

思路与难点
1.仔细分析页面结构,学会创建节点和将节点插入到指定位置
2.难度系数不高;哪里不会看前面的笔记;
3.详细信息已在代码注释中体现;
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">  
    <title>Title</title>
    <style>

        * { margin: 0; padding: 0;}
        .ovfl { overflow: hidden}
        .fr{ float: right}
        .t-cent { text-align: center}
        li { list-style: none}
        .header { position: relative; top: -5px;}
        .header span {  width: 40px; height: 12px; display: inline-block; background-color: #999; border-radius: 10px;}
        .list-wrap { width: 300px; margin: 20px auto; height: 520px; padding: 10px; border: 1px solid #999;
            box-shadow: 0 0 0 2px rgba(0,0,0,.2); border-radius: 10px; }
        #list {background-color: #f9f9f9; border-radius: 10px 10px 0 0 ;border: 1px solid #f1f1f1; height: 400px; overflow: auto; padding: 15px;}
        .cont { overflow: hidden}
        img { width: 50px; height: 50px; border-radius: 5px;}
        .user1 img{ float: left}
        .user2 img { float: right}
        .text { max-width: 160px; margin: 10px 15px; padding: 10px; line-height: 20px; border-radius: 5px;}
        .user1 .text { float: left;  background-color: #fff;}
        .user2 .text { float: right; text-align: right; background-color:#9f0;}


        .box { padding: 20px 5px; border-top: 1px solid #f1f1f1; }
        .user {float: left; width: 60px;line-height: 24px; position: relative; text-align: center;white-space: nowrap;
            border-radius: 3px; padding:3px;border: 1px solid #eee;}
        .name-list { position: absolute; padding:0 5px; left:-5px; text-align:left;  bottom: 35px; width: 100px; display: none;
            background-color: #fff; border-radius: 6px;border: 1px solid #eee; cursor: pointer}
        .name-list li { border-bottom: 1px solid #eee;line-height: 30px; padding:0 0 0 8px; }
        .name-list li:nth-child(2) { border: none}
        .name { overflow: hidden;cursor: pointer;
            text-overflow: ellipsis;; }
        #text { float: left; margin:0 10px; height: 20px; line-height: 20px; width: 140px; padding: 5px;
            border-radius: 5px; border: 1px solid #eee; box-shadow: 0 0 1px rgba(0,0,0,.5)}
        #send {float: left; width: 40px; border: none; outline: none; cursor: pointer; box-sizing: content-box; color: #fff; background-color: #35d;border-radius: 3px; text-align: center; line-height: 20px; padding: 5px;}
    </style>
</head>
<body>

<div class="list-wrap">
    <div class="header t-cent">
        <span> </span>
    </div>
<ul id="list">
    <li class="user1">
        <div class="cont">
            <img src="1.jpg">
            <p  class="text">hi!史塔克</p>
        </div>
    </li>
    <li class="user2">
        <div class="cont">
            <img src="2.jpg">
            <p  class="text">hi!莉莉妮特</p>
        </div>
    </li>
</ul>
<div class="box">
    <div class="user">
        <div class="name" id="name"  data-id="1">莉莉妮特</div>
        <ul class="name-list" id="name-list">
            <li data-id="1">莉莉妮特</li>
            <li data-id="2">史塔克</li>
        </ul>
    </div>
    <input type="text" id="text" value="">
    <input type="button" type="button" id="send" value="发送">
</div>
</div>

<script type="text/javascript" src="jquery/jquery-3.0.0.min.js"></script>
<script type="text/javascript">
var yuan;//定义全局变量,用来标记选择的名字
    $("#name").on("click",function(){
        
        $("#name-list").css("display","block");//点击时显示出名字列表
       
        $("#name-list li").click(function(){ //当点击时选择其中一个名字
            yuan = $(this).html();//记录下选择的名字,用于后面判断
            $("#name").html($(this).html());//将选择的名字显示在列表里
            $("#name-list").css("display","none");//名字列表消失
        })
    })  
//输入文字,点击发送   
    // <li class="user2">
    //     <div class="cont">
    //         <img src="2.jpg">
    //         <p  class="text">hi!莉莉妮特</p>
    //     </div>
    // </li>  
    //此刻先分析页面结构
    //1.每一句话的显示都是一个li标签
    //2.里面有一个div都有一个img标签(用来放置头像)和一个p标签(用来存将要发送的文字)
    //3.所以,每创建一句话,都要创建这些标签,才能保证页面不会错乱
    $("#send").on("click",function(){
        //得到文字$("#text").val()
        var $language=$("<p  class='text'></p>");//创建一个p标签
        var $cont = $("<div class='cont'></div>");//创建一个div
        $language.html($("#text").val());//得到即将发送的文字
        //进行判断,当时选择的是莉莉妮特
        if(yuan=="莉莉妮特") {
            var $img=$("<img src='1.jpg'>"); //创建莉莉妮特的头像       
            $cont.append($img);//将头像添加到div里
            $cont.append($language);//将即将发送的文字添加到div里
            var $li = $("<li class='user1'></li>");//创建一个li用来
            $li.append($cont); //将div添加到li标签里
            $("#list").append($li) //将li标签显示在页面上
         }else{
            var $img=$("<img src='2.jpg'>");//创建史塔克的头像
            $cont.append($img);//将头像添加到div里
            $cont.append($language);//将即将发送的文字添加到div里
            var $li = $("<li class='user2'></li>");//创建一个li用来
            $li.append($cont);//将div添加到li标签里
            $("#list").append($li)//将li标签显示在页面上      
         }
    })
</script>

</body>
</html>

三、自定义表格

思路与难点
1.自定义表即我们输入行列,点击创建就可以创建出我们对应的表格;
2.难度系数不高,哪里不会看以前的笔记哦,其实看思维导图就可以了
3.这里用js和jQuery两种方式写,大家可以对照理解一下,也复习一下js;
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript" src="jquery/jquery-3.0.0.min.js"></script>
    <style type="text/css">
        table{
            border: 1px solid #000;
        }
        td{
            width: 80px;height: 40px;border:1px solid #000;
        }
        input{
            border-radius: 7px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
    请输入行:<input class="colValue" type="text" id="row"><br>
    请输入列:<input class="rowValue" type="text" id="col"><br>
    <button id="btn">生成表格</button>
    <table cellpadding="0" cellspacing="0" id="tab">
        
    </table>
    <script type="text/javascript">
    //用JavaScript写的代码
        document.getElementById("btn").onclick = function(){
            var r = document.getElementById("row").value;
            var c = document.getElementById("col").value;
            var oTab = document.getElementById("tab");
            for (var i = 0; i < r; i++) {
                var tr = document.createElement("tr");
                oTab.appendChild(tr);
                for(var j=0;j<c;j++){
                    var td = document.createElement("td");
                    tr.appendChild(td);
                }
            }
        }
    //用jQuery写的代码
        $("button").click(function(){
            $("table").html("");
            var h = parseInt($(".colValue").val());//得到输入的行         
            var l = parseInt($(".rowValue").val());//得到输入的列         
            for (var i = 0; i < h; i++) {//循坏创建表格的行
                var $tr = $("<tr></tr>");           
                $tr.appendTo("table");//将创建的行添加到table标签中                
                for(var j = 0 ; j < l ; j++){//循环在表格的行中创建每一个单元格
                    $("<td></td").appendTo($tr);
                }
            }
        })

    </script>
</body>
</html>

四、模拟抽奖

模拟抽奖.gif

思路与难点
1.利用随机数来确认是否中奖;
2.熟练的操作节点;
代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        *{
            padding: 0;
        }
        table{
            margin: 0 auto;
            margin-top: 100px;
        }
        td{
            width: 80px;
            height: 82px;
            /*background-color: green;*/
        }
    </style>
</head>
<body>
    <table>
        <tr>
            <td><img src="1.png" alt=""></td>
            <td><img src="2.png" alt=""></td>
            <td><img src="3.png" alt=""></td>
        </tr>
        <tr>
            <td><img src="1.png" alt=""></td>
            <td><img src="2.png" alt=""></td>
            <td><img src="3.png" alt=""></td>
        </tr>
        <tr>
            <td><img src="1.png" alt=""></td>
            <td><img src="2.png" alt=""></td>
            <td><img src="3.png" alt=""></td>
        </tr>
    </table>
    <script type="text/javascript" src = jquery/jquery-3.0.0.min.js></script>
    <script type="text/javascript">
        $("td").one("click",function(){
            if (Math.random()*10 < 1) {
                this.innerText = "你中奖了"
            }else{
                this.innerText = "你未中奖"
            }
            $(this).css("background-color","lawngreen");
        }).on("mouseout",function(){
            $(this).css("background-color","white");
            $("tr :first-child").html('<img src="1.png" alt="">');
            $("tr :nth-child(2)").html('<img src="2.png" alt="">');
            $("tr :last-child").html('<img src="3.png" alt="">');   
        })
    </script>
</body>
</html>

文章的最后简单的梳理一下知识点,详细看思维导图哦~

添加事件
给元素添加响应事件

on(“事件名”,“相应函数”)

给多个事件添加同一个相应函数,事件名和事件名之间用空额隔开

on("事件名 事件名",响应函数)

一次性添加多个事件的响应

on({"事件名1":"相应函数1","事件名2":"相应函数2","事件名3":"相应函数3"})
可以向相应函数中传参
参数写在函数名的后面,用逗号分隔
参数为对象或者是数字
注意:链式操作

移除事件
移除所有事件

off()

移除某一事件

off(“事件名”)

移除某一相应函数

off(“事件名”,函数名)

小插曲:
页面载入:页面加载完毕会触发
$(document).ready(function(){});
简写:$(function(){正式代码在此处填写})

合成事件

mouseover和mouseout的合成事件
hover()
格式:jQuery.hover(mouseover的事件函数,mouseout的事件函数)

事件对象

事件对象只需要获取,不需要创建,每触发一次事件,就会触发这个事件的所有信息

自定义事件

1、自己定义的事件,必须先通过on/bind绑定
2、然后通过trigger()触发函数
小知识
jQuery.trigger("事件名"):在每一个匹配的元素上触发某类事件

事件委托

也叫事件代理,利用事件冒泡给父元素添加事件处理程序从而使所有子元素都可以触发该事件

优点:
1.减少DOM操作
2.新添加的子元素同样可以相应事件
适用场景:如果所有的子元素都要求实现这个同样的效果,可以考虑让父元素替子元素去响应事件

jQuery自带事件

show() 让元素显示,相当于 .css("display","bloak")

hidden() 让元素显示,相当于 .css("display","none")

fadeIn()
fadeOut()
fadeToggle() 通过不透明度的变化来控制所有匹配元素的淡入和淡出效果,并在动画完成后可选的触发一个回调函数

slideDown()
slideUp()
slideToggle() 过高度变化来切换所有匹配元素的可见性,并在切换完成后可选地触发一个回调函数。


累了吧给你笑话~

【程序员被提bug之后的反应】1.怎么可能;2.在我这是好的,不信你来看看;3.真是奇怪,刚刚还好好的;4.肯定是数据问题;5.你清下缓存试试;6.重启下电脑试试;7.你装的什么版本的类库(jdk)8.这谁写的代码;9.尼玛怎么还在用360安全浏览器;10.用户不会像你这么操作的。

任何时候不要吝啬的你赞美,喜欢就点赞咯~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341

推荐阅读更多精彩内容

  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,313评论 0 8
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,157评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,319评论 0 2
  • 孤独守住内心的思考,让自己变得沉静,满眼的蓝天,深邃的让人感动;绿绿的草地,上面是密密匝匝的格桑花疯了似的开...
    海深深阅读 256评论 0 0
  • 062,第六十二天,今日绘画主题:儿童插画(二)这个小小世界里的书香(彩色铅笔临摹)。 注:画作的参考素材来源于网...
    童梦夏天阅读 721评论 1 18