Массивное всплывающее окно: получение текущего элемента в обратном вызове

В Magnific Popup я хочу получить атрибут в ссылке, которая нажата, и использовать ее в функции обратного вызова (используя обратные вызовы: открыть), чтобы внести некоторые изменения в DOM.

Как я могу это сделать? Например, в приведенном ниже коде он должен возвращать "он работает" для консоли. Вместо этого он печатает "does not work". Пожалуйста, помогите!

<a href="#test-popup" class="open-popup-link" myatt="hello">Show inline popup</a>

<script src="jquery.magnetic.custom.js"></script>

<script>

    $(document).ready(function() {
      $('.open-popup-link').magnificPopup({
        type:'inline',
        midClick: true,
        callbacks: {
          open: function() {

            if ($(this).attr('myatt')=="hello") 
            { 
              // do something 
              console.log("it works");
            }
            else
            {
              console.log("doesnt work");
            }

          },
          close: function() {

          }
        }

      });
    });

</script>

<div id="test-popup" class="white-popup mfp-hide">
  Popup content
</div>

Ответ 1

Для Magnific Popup v0.9.8

var magnificPopup = $.magnificPopup.instance,
              cur = magnificPopup.st.el;
console.log(cur.attr('myatt'));

Ответ 2

Во-первых, я рекомендую вам использовать атрибут data (data-custom = "foo" ) или известный атрибут.

HTML:

  <a href="photo.jpg" class="popup" data-custom="dsaad">Do it!</a>
  <a href="photo.png" class="popup" data-custom="mycustomdata">Do it!</a>

jQuery:

$('.popup').magnificPopup({
  type : 'image',
  callbacks : {
    open : function(){
      var mp = $.magnificPopup.instance,
          t = $(mp.currItem.el[0]);

      console.log( t.data('custom') );
    }
  }
});

Я не знаю, существует ли лучший способ. На самом деле вы можете прочитать их документацию о публичных методах, и вы увидите там. Я тестировал код выше, и все работает нормально:)

Ответ 3

Для v. 0.9.9:

this.currItem.el

Ответ 4

// "item.el" is a target DOM element (if present)
// "item.src" is a source that you may modify
open: function(item) {}

и использовать атрибуты данных, например data-myatt, которые получают:

$(this).data('myatt')

Ответ 5

Доступ к элементу с щелчком можно получить в обратном вызове, используя:

this.st.el

Внутри обратного вызова "this" ссылается на $.magnificPopup.instance.

В общедоступных свойствах:

"magnificPopup.st.el//Объект с щелчком мыши, который открыл всплывающее окно (работает, если всплывающее окно инициализируется элементом DOM)"

Ответ 6

Кроме того, внутри open: function(item) {}, this.content может помочь. Он вернет div отображаемого содержимого. полезно также с change: function () {}. Надеюсь, это поможет кому-то вроде меня.