Jquery(3)

常见的事件

click(function(){...})        点击触发事件
hover(function(){...})        鼠标移动到上面触发
blur(function(){...})         鼠标取消选中触发
focus(function(){...})        鼠标选中触发
change(function(){...})       元素的值发生变化的时候触发,常用与select
keyup(function(){...})        键盘按键按下的时候触发
keydown(function(){...})      键盘按键松开的时候触发    

绑定事件的两种方式

1. click(function(){...})   -----绑定点击事件

2. $('父标签').on("对象","事件名称", function(){...})  ----事件委托
事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件。

    1.常用来作用于哪些会在未来创建或者增加的元素上面,使未来元素也能继承特点功能
    2.实现的原理时冒泡原理,即从触发者本身开始往上一级查找绑定的事件,直到找到为止,类似气泡从水底上浮

事件委托在表格的增删改查中有使用
$("对象").on("事件名称", function(){...})  ----另一种事件的写法,但是没有使用事件冒泡

表格的增删改以及模态框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>今日作业</title>
    <style>
        .cover {
            position: fixed;
            top: 0;
            right: 0;
            bottom: 0;
            left: 0;
            background-color: rgba(0, 0, 0, 0.4);
            z-index: 9;
        }

        .modal {
            position: absolute;
            left: 50%;
            top: 50%;
            height: 300px;
            width: 400px;
            background-color: white;
            z-index: 100;
            margin-top: -150px;
            margin-left: -200px;
        }

        .hide {
            display: none;
        }
    </style>
</head>
<body>

<button id="add">新增</button>

<table border="1">
    <thead>
    <tr>
        <th>#</th>
        <th>姓名</th>
        <th>爱好</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>1</td>
        <td>Egon</td>
        <td>喊麦</td>
        <td>
            <input type="button" value="编辑" class="edit">
            <input type="button" value="删除" class="delete">
        </td>
    </tr>
    <tr>
        <td>2</td>
        <td>Alex</td>
        <td>吹牛逼</td>
        <td>
            <input type="button" value="编辑" class="edit">
            <input type="button" value="删除" class="delete">
        </td>
    </tr>
    <tr>
        <td>3</td>
        <td>苑昊</td>
        <td>不洗头</td>
        <td>
            <input type="button" value="编辑" class="edit">
            <input type="button" value="删除" class="delete">
        </td>
    </tr>

    </tbody>
</table>


<div class="cover hide"></div>
<div class="modal hide">
    <p><input type="text" id="username"></p>
    <p><input type="text" id="hobby"></p>
    <p>
        <button id="submit">提交</button>
        <button id="cancel">取消</button>
    </p>
</div>

<script src="jquery-3.3.1.min.js"></script>
<script>
    function hideModal() {
        $('.cover,.modal').addClass('hide');
    }
    function showModal() {
        $('.cover,.modal').removeClass('hide');
    }
    $('#add').click(function () {
        showModal();

    });
    $('#submit').click(function (index) {
        hideModal();
//        打开模态框
//        获取input的值
        let type = $($('tbody tr').eq[index]).data('type');
        console.log(type);
        if (typeof ($('.modal').data('tr'))==='object'){
//            let username = $($('tbody tr').eq[index]).data('tr1');
//            let hobby = $($('tbody tr').eq[index]).data('tr2');
//            $($($('tbody tr')[index]).children()[1]).text(username);
//            $($($('tbody tr')[index]).children()[2]).text(hobby);
            let new_username=$('#username').val();
            let new_hobby=$('#hobby').val();
            $($('.modal').data('tr').children()[1]).text(new_username);
            $($('.modal').data('tr').children()[2]).text(new_hobby);
            $('.modal').removeData('tr')
        }
        else {
            let username=$('#username').val();
            let hobby=$('#hobby').val();
    //       把值拼接给TR>TD(创建节点是显示的,必须在append之后才会显示)
            let trEle = document.createElement('tr');
            let td1 = document.createElement('td');
            td1.innerText=$('table tr').length;
            $(trEle).append(td1);
            let td2 = document.createElement('td');
            td2.innerText=username;
            $(trEle).append(td2);
            let td3 = document.createElement('td');
            td3.innerText=hobby;
            $(trEle).append(td3);
            let td4 = document.createElement('td');
            td4.innerHTML=`<input type="button" value="编辑" class="edit">
            <input type="button" value="删除" class="delete">`;
            $(trEle).append(td4);
            $('table tbody').append(trEle);
        }
    });
//    事件委托,冒泡事件(从当前向上一级找事件触发的函数)
    $('table').on('click','.delete',function () {
//        删除当前行
        $(this).parent().parent().remove();
        //删除之后动态调整序号
        let len = $('table tr').length;
        for (let i = 1; i < len; i++) {
            $('table tr:eq(' + i + ') td:first').text(i);
        }
    });
    $('table').on('click','.edit',function () {
        showModal();
//        将列表的信息填入模态框的input中
        let tr = $(this).parent().parent();
        let username=$(tr.children()[1]).text();
        let hobby=$(tr.children()[2]).text();
        console.log(username);
        console.log(hobby);
        $('#username').val(username);
        $('#hobby').val(hobby);
//新思路:jQuery对象代表的是对象被修改,对象所在的节点的数据也会被修改,$('.modal')这个对象填谁都可以,只要能保证jq对象数据不会被清除就行,其次需要考虑多次编辑的情况下,之前保留的jq对象数据会不会残留,
//导致后面回填数据错误,实际测试好像并不影响,可能是数据对象呗重新赋值,所以老数据呗新数据替换掉了-.-||,实测以上全错,编辑之后再新增,会出错,新增的对象不会出现,会对被编辑的对象做修改,
//解决方案,每次使用完jq对象,就.removeDate('key')清除原来的对象 $('.modal').data('tr',tr); //自己的思路 // let new_username=$('#username').val(); // let new_hobby=$('#hobby').val(); // let index=$(this).parent().parent().index(); // console.log(index); // tr.data({'type':1,'index':index,'tr1':123,'tr2':1234}); // console.log(tr.data()); // return tr.data(); //点击提交按钮时,怎么判断用哪个功能? // type(jquery对象) 如果是对象就是object类型,否则是undefined //老师的方法我不会 // let tr = $(this).parent().parent(); // $(this).data('tr',tr); }); $('#cancel').on('click',function () { hideModal(); $('#username').val(''); $('#hobby').val(''); }) </script> </body> </html>

  

猜你喜欢

转载自www.cnblogs.com/shanjinghao/p/9146854.html