После того, как jQuery динамически добавляет элементы, происходит сбой события регистрации элемента.

Недавно Диу Цзян изучал jQuery и во время учебы столкнулся с проблемой.Хотя она была наконец решена, Диу Цзян чувствовал, что решение этой проблемы следует записать, чтобы другие друзья, столкнувшиеся с той же проблемой, не решили ее, как я. Это было долго.
Сначала выложу кусок кода с нормальной логикой

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="jquery.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        a {
            text-decoration: none;
        }
        
        button {
            position: relative;
            left: 712px;
            top: 97px;
        }
        
        .content {
            width: 500px;
            height: 30px;
            line-height: 30px;
            border: 1px solid #bbb;
            margin: 100px auto;
            border-collapse: collapse;
        }
        
        th {
            background-color: rgb(27, 126, 184);
            color: #fff;
            border: 1px solid #bbb;
        }
        
        td {
            border: 1px solid #bbb;
        }
    </style>
</head>

<body>
    <button>添加数据</button>
    <table class="content" align="center">
        <tr>
            <th style="font-weight: 700;">课程名称</th>

            <th style="font-weight: 700;">所属学院</th>

            <th style="font-weight: 700;">已学会</th>
        </tr>

    </table>

    <script>
        $(function() {
            var t1 = $('<tr align="center"><td>javaScript</td><td>传智播客-前端与移动开发学院</td><td><a href="javascript:;" class="del">GET</a></td></tr>');
            var t2 = $('<tr align="center"><td>css</td><td>传智播客-前端与移动开发学院</td><td><a href="javascript:;">GET</a></td></tr>');
            var t3 = $('<tr align="center"><td>html</td><td>传智播客-前端与移动开发学院</td><td><a href="javascript:;">GET</a></td></tr>');
            var t4 = $('<tr align="center"><td>jQuery</td><td>传智播客-前端与移动开发学院</td><td><a href="javascript:;">GET</a></td></tr>');
            $('button').on('click', function() {
                // console.log($('table tr'));
                if ($('table tr').length === 1) {
                    $('table').append(t1);
                    console.log($(".del"));
                    // console.log($('table tr').length);
                } else if ($('table tr').length === 2) {
                    $('table').append(t2);
                } else if ($('table tr').length === 3) {
                    $('table').append(t3);
                } else if ($('table tr').length === 4) {
                    $('table').append(t4);
                } else {
                    return false;
                }
            });
            // $("table a").on('click', function() {
            //         $('table').children('tr').remove();
            //     })

            $('tr').on('click', 'a', function() {
                console.log(11);
                $(this).parents('tr').remove();
            })
        })
    </script>
</body>

</html>

Процесс работы с интерфейсной страницей:

1. Сначала нажмите кнопку «Добавить данные», чтобы динамически сгенерировать тег a.

2. Щелкните метку (GET) еще раз, чтобы просмотреть консоль.

Результат: ничего не выводится из консоли

Потому что писать так проблематично. Все нужно модифицировать. Сначала я опубликую свой измененный код. объяснил позже

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="jquery.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        a {
            text-decoration: none;
        }
        
        button {
            position: relative;
            left: 712px;
            top: 97px;
        }
        
        .content {
            width: 500px;
            height: 30px;
            line-height: 30px;
            border: 1px solid #bbb;
            margin: 100px auto;
            border-collapse: collapse;
        }
        
        th {
            background-color: rgb(27, 126, 184);
            color: #fff;
            border: 1px solid #bbb;
        }
        
        td {
            border: 1px solid #bbb;
        }
    </style>
</head>

<body>
    <button>添加数据</button>
    <table class="content" align="center">
        <tr>
            <th style="font-weight: 700;">课程名称</th>

            <th style="font-weight: 700;">所属学院</th>

            <th style="font-weight: 700;">已学会</th>
        </tr>

    </table>

    <script>
        $(function() {
            var t1 = $('<tr align="center"><td>javaScript</td><td>传智播客-前端与移动开发学院</td><td><a href="javascript:;" class="del">GET</a></td></tr>');
            var t2 = $('<tr align="center"><td>css</td><td>传智播客-前端与移动开发学院</td><td><a href="javascript:;">GET</a></td></tr>');
            var t3 = $('<tr align="center"><td>html</td><td>传智播客-前端与移动开发学院</td><td><a href="javascript:;">GET</a></td></tr>');
            var t4 = $('<tr align="center"><td>jQuery</td><td>传智播客-前端与移动开发学院</td><td><a href="javascript:;">GET</a></td></tr>');
            $('button').on('click', function() {
                // console.log($('table tr'));
                if ($('table tr').length === 1) {
                    $('table').append(t1);
                    console.log($(".del"));
                    // console.log($('table tr').length);
                } else if ($('table tr').length === 2) {
                    $('table').append(t2);
                } else if ($('table tr').length === 3) {
                    $('table').append(t3);
                } else if ($('table tr').length === 4) {
                    $('table').append(t4);
                } else {
                    return false;
                }
            });
            // $("table a").on('click', function() {
            //         $('table').children('tr').remove();
            //     })

            $('.content').on('click', 'a', function() {
                console.log(11);
                $(this).parents('tr').remove();
            })
        })
    </script>
</body>

</html>

Процесс работы с интерфейсной страницей:

1. Сначала нажмите кнопку «Добавить данные», чтобы динамически сгенерировать тег a.

2. Щелкните метку (GET) еще раз, чтобы просмотреть консоль.

**Результат: Консоль начинает вывод**

Начал объяснять. На самом деле, вы можете видеть, что здесь есть только одно отличие. выкладываю эти два

// 控制台不输出
// 通过on事件委派来给tr里面的a标签添加点击事件
$('tr').on('click', 'a', function() {
    console.log(11);
    $(this).parents('tr').remove();
});
// 控制台输出
$('.content').on('click', 'a', function() {
    console.log(11);
    $(this).parents('tr').remove();
});

В первом случае мы делегируем событие щелчка элементу тега a. Но такой jquery не может получить динамически добавляемые элементы.

Объяснение программы:

Хотя on может привязывать события к элементам, динамически созданным в будущем, он должен сначала получить родительский элемент, которым он уже владеет. Только тогда можно получить динамические элементы.

То есть добавить событие к родительскому элементу (тип события такой же, как тип события, который хочет реализовать динамический элемент)

Итак, здесь вы можете получить:

    <table class="content" align="center">
        <tr>
            <th style="font-weight: 700;">课程名称</th>

            <th style="font-weight: 700;">所属学院</th>

            <th style="font-weight: 700;">已学会</th>
        </tr>

// 动态添加的元素
        <tr align="center">
            <td>javaScript</td>

            <td>传智播客-前端与移动开发学院</td>
            
            <td><a href="javascript:;" class="del">GET</a></td>
        </tr>
    </table>

.content является родителем тега a

$('.content').on('click', 'a', function() {
    console.log(11);
    $(this).parents('tr').remove();
})

Только помните, что в динамически генерируемом элементе его события нельзя указать напрямую. Только события его родительского тега могут быть отфильтрованы, чтобы указать определенные события элемента.

Есть и другой способ записи: напрямую указать событие элемента dom. Это также возможно.

$(document).on('click',"a",function(){
	console.log("22");
})

Supongo que te gusta

Origin blog.csdn.net/DIUDIUjiang/article/details/126284588
Recomendado
Clasificación