Я хочу получить значение data-id и data-test, используя jquery из элемента span, созданного динамически

Я не получаю значение идентификатора данных из элемента span при нажатии.

function getvalue() {
  alert($(this).data('id'));
  alert($(this).attr('data-id'));
  alert($(this).data('test'));
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class = "myclass" data-id = "bcd" data-test = "sjd" onclick = "getvalue(this)">click here</span>

чтобы получить данные из data-id и data-test на элементе span, нажмите Еще одна вещь, которую я создал динамически, поэтому я не могу сделать щелчок, используя #id. Пожалуйста, помогите.

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
3
0
290
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы используете атрибут события on*, поэтому this в функции является window, а не элементом, вызвавшим событие. Вы передаете элемент в качестве аргумента функции, поэтому вам просто нужно определить аргумент в сигнатуре функции, например:

function getvalue(el) {
  console.info($(el).data('id'));
  console.info($(el).attr('data-id'));
  console.info($(el).data('test'));
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class = "myclass" data-id = "bcd" data-test = "sjd" onclick = "getvalue(this)">click here</span>

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

В вашем вопросе также говорится, что элементы добавляются динамически, поэтому в этом случае вам нужно будет использовать делегированный обработчик событий. Таким образом, вы можете использовать on():

$(function() {
  $(document).on('click', '.myclass', function() {
    console.info($(this).data('id'));
    console.info($(this).data('test'));
  });
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class = "myclass" data-id = "bcd" data-test = "sjd">click here</span>

Также обратите внимание на использование console.info() для отладки вместо alert(). Последнего следует избегать, так как он принуждает типы данных, что может скрыть проблемы, а также является модальным, что раздражает.

Спасибо, это работает @Rory McCrossan, поэтому использование «this» отправляло все окно в мою функцию? Не могли бы вы объяснить, что на самом деле сделал 'el' в getvalue(el) ?

Ricky 15.05.2019 11:59

Вы отправляете this функции в вызове getvalue. el — это определение аргумента в самой функции. Я бы посоветовал прочитать несколько руководств по JS о том, как работают функции, например: medium.com/front-end-weekly/…

Rory McCrossan 15.05.2019 12:03

Спасибо @Rory McCrossan, да, я использовал console.info до того, как увидел, что все окно переходит к «этому», но я его пропустил. :) Большое спасибо, вы сэкономили мое время.

Ricky 15.05.2019 12:04

Также обратите внимание, что окно не «передается» функции как таковой, но функция выполняется в рамках этого объекта.

Rory McCrossan 15.05.2019 12:05

Понял, спасибо. @Рори МакКроссан

Ricky 15.05.2019 12:21

Другие вопросы по теме