Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
1

Не работает определение индекса элемента в обработчике

04.02.2023, 11:14. Показов 441. Ответов 7

Author24 — интернет-сервис помощи студентам
Здравствуйте. Вот страница:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!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>Star Rating</title>
    <link rel="stylesheet" href="/Task2/rating_stars_styles.css">
</head>
<body>
    <div id="centralDiv">
        <h2>
            Star Rating:
        </h2>
        <div class="starDiv"></div>
        <div class="starDiv"></div>
        <div class="starDiv"></div>
        <div class="starDiv"></div>
        <div class="starDiv"></div>
    </div>
    <script src="/jquery-3.6.3.js"></script>
    <script src="/Task2/rating_stars.js"></script>
</body>
</html>
Даны несколько дивов класса starDiv, которые описаны внутри дива centralDiv.
Текущая задача - с помощью jQuery определить, по какому по счету "starDiv" было произведено нажатие.

Написал этот обработчик, но он не работает, все время выводит -1:
Javascript
1
2
3
4
$(".starDiv").click(() => {
    var set = $('.starDiv');
    alert(set.index(this));
});
А этот обработчик я нашел в интернете, и он отлично работает:
Javascript
1
2
3
4
$('div').on('click', '.starDiv', function () {
    var set = $('.starDiv');
    alert(set.index(this));
});
Кто-то может объяснить, почему не работает мой вариант и почему работает вариант с интернета?
Что вижу я - в примере с интернета не используется метод click(), а используется метод on(). Как я знаю, on(), как и delegate() используется в тех случая, когда нужно добавить обработчики к новым элементам страницы, которых не было изначально. Но все мои дивы прописаны в разметке, никуда не удаляются и не добавляются. Так в чем причина?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2023, 11:14
Ответы с готовыми решениями:

Определение индекса наибольшего элемента массива
Помогите составить программу: Одномерный массив задаётся пользователем. Составьте программу...

Определение индекса элемента ListBox и вывод следующего
Слово вводят в textbox , нужно определить его индекс в listbox и вывести в label текст который...

Определение индекса максимального по модулю элемента одномерного массива
Составить процедуру для определения индекса максимального по модулю элемента одномерного массива...

Определение максимального элемента без определения его индекса
Определение максимального элемента без определения его индекса. На выходе к максимальному...

7
418 / 310 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
04.02.2023, 12:29 2
Если грубо говорить, то в первом случае вы ссылаетесь на
HTML5
1
<div class="starDiv">
Во втором, на
HTML5
1
<div id="centralDiv">
1
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
04.02.2023, 12:43  [ТС] 3
brian778, спасибо, да, это так.

Но, я только что разобрался - причина была в другом. В моём варианте "this" у меня почему-то представлялся окном, а не элементом, инициировавшим событие. Поменял на "$(e.target)" - все заработало.

Javascript
1
2
3
4
$(".starDiv").click((e) => {
    var set = $('.starDiv');
    alert(set.index($(e.target)));
});
0
418 / 310 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
04.02.2023, 12:59 4
Лучший ответ Сообщение было отмечено Rhoxolan как решение

Решение

Цитата Сообщение от Rhoxolan Посмотреть сообщение
причина была в другом
Не прав был. Это изза Arrow function

Добавлено через 1 минуту
Пример
Javascript
1
2
3
4
$(".starDiv").click(function() {
    var set = $('.starDiv');
    alert(set.index(this));
});
1
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
04.02.2023, 13:03  [ТС] 5
brian778, Да, проверил, это действительно так, так тоже работает. Спасибо.
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
07.02.2023, 17:08 6
Цитата Сообщение от brian778 Посмотреть сообщение
Пример
Плохой пример

Javascript
1
2
3
$(".starDiv").click(function() {
    let index = $(this).index();
});
0
418 / 310 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
07.02.2023, 17:12 7
xkkx, А я тут причём? Это же не мой код
1
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
07.02.2023, 17:24 8
Цитата Сообщение от brian778 Посмотреть сообщение
А я тут причём? Это же не мой код
Просто сказал)Вообще плохая затея таким способом на блоки ставить обработчики, говорю с большим опытом. Я на практике делаю вот так

PHP
1
2
3
4
5
6
$(document).on('click', '.starDiv', function() {
    let MainBlock =  $(this).closest('#centralDiv'); // лучше заменить на .centralDiv 
    let h2 = MainBlock.find('h2');
    let index = $(this).index();
    h2.html('Star Rating: ' + index);
})
Это хорошо помогает когда на странице много динамических элементов, и вечно обработчики обновлять не имеет никакого смысла. В добавок некоторые блоки имеют свойства на странице повторяться, и что бы не прописывать для каждого блока свой скрипт, легче делать всё в таком стиле
0
07.02.2023, 17:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2023, 17:24
Помогаю со студенческими работами здесь

Определение индекса элемента одномерного массива, который равен 25
Написать программу для определения индекса элемента одномерного массива, который равен 25. Срочно.

Определение индекса последнего max и первого min элемента последовательности
Доброго времени суток, уважаемые программеры и сисадмины. Помогите пожалуйста в решении казалось бы...

Определение индекса элемента массива при его выборе кнопкой
Здравствуйте ! На форме расположено N элементов TImage одномерного массива Img, которые были...

Определение индекса элемента массива, имеющего максимальное значение (функция)
Написать функцию для определения индекса элемента массива, имеющего максимальное значение.

Определение индекса элемента, равного заданному числу, для массива, отсортированного по возрастанию
вот такое легонькое заданьице) кто щнает как решать пжл помогите))) Определение индекса элемента,...

Вывод индекса элемента массива, код работает некорректно
задается массив от -20 до 20 должен выводить индекс выбранного числа или же сообщение что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru