Вызов набора данных html в функции плагина

<button class = "draw-sector-button" data-sector_no = "0">Draw first</button>
<section id = "section-0"></section>
<button class = "draw-sector-button" data-sector_no = "1">Draw second</button>
<section id = "section-1"></section>

HTML-страница имеет несколько разделов и кнопок в каждом.

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

$('.draw-sector-button').myDrawPlugin({ // my data table generator
    param1 : 'foo',
    param2 : 'bar',
    onComplete : function(result) {
        var i = $(this).data('sector_no'); // (i : undefined)
        $('#section-'+i).html(result.data_table);
    }
});

Они говорят обратное: «у вас есть доступ к фактическому узлу изображения через ключевое слово this в обратном вызове». на странице Учебный центр JQuery. Так что я в замешательстве. Кто-нибудь может предложить решение?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Не могли бы вы поделиться определением myDrawPlugin, чтобы понять, как связывается и обрабатывается событие клика?

В любом случае, это внутри обратного вызова onComplete будет ссылаться на объект (параметр), переданный функции плагина, поэтому, если вы хотите, чтобы данные элемента кнопки были доступны, вам нужно tp передать ссылку на соответствующий элемент обратному вызову onComplete, когда вы вызываете его на кнопке нажмите.

Посмотрите, работает ли этот способ обработки для вас,

$.fn.myDrawPlugin = function(opts) {
    // Button click handling
    $(this).on("click", function(){
       opts.onComplete(this, {data_table: "<div>Hello World!</div>"});
    });
};

$('.draw-sector-button').myDrawPlugin({ // my data table generator
  param1 : 'foo',
  param2 : 'bar',
  onComplete : function(element, result) {
    var i = $(element).data('sector_no'); 
    $('#section-'+i).html(result.data_table);
  }
});

рабочий фрагмент: https://jsfiddle.net/d7g8kb1j/1/

Хорошая идея: вернуть ссылку на элемент из плагина. Спасибо, это работает. Я забыл разместить код плагина, но вы хорошо угадали структуру. $(element).data('sector_no') получает правильное значение, как указано в атрибуте html. Также в этом сценарии хорошо работает element.data('sector_no').

Cevdet Hamarat 25.07.2019 14:15

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