Подтвердить что ты не робот

Открыть fancybox из функции

Я пытаюсь открыть fancybox из функции, которую у меня есть - короче, мой HTML-код выглядит следующим образом:

<a href="#modalMine" onclick="myfunction(this); return false;">
  click
</a>

и часть моей функции выглядит так:

function myfunction(me) {
    $(me).fancybox({
        'autoScale': true,
        'transitionIn': 'elastic',
        'transitionOut': 'elastic',
        'speedIn': 500,
        'speedOut': 300,
        'autoDimensions': true,
        'centerOnScroll': true,
    });
}

Вышеописанное работает в IE, но не в FireFox или Chrome - любая идея, как я могу это исправить? Я знаю, что нужно инициировать другое соединение, но я надеюсь, что возможно другое решение.

4b9b3361

Ответ 1

Поскольку вы используете jQuery, прекратите привязывать обработчики событий в своем HTML и начните писать ненавязчивый JavaScript.

$(document).ready(function ()
{
    function myfunction(me)
    {
        $(me).fancybox({
            'autoScale': true,
            'transitionIn': 'elastic',
            'transitionOut': 'elastic',
            'speedIn': 500,
            'speedOut': 300,
            'autoDimensions': true,
            'centerOnScroll': true // remove the trailing comma!!
        }).click();
        // fire the click event after initializing fancybox on this element
        // this should open the fancybox
    }

    // use .one() so that the handler is executed at most once per element
    $('a[href=#modalMine]').one('click', function ()
    {
        myfunction(this);
        return false;
    });
});

Однако я особо не вижу причины для настройки fancybox при нажатии. Вы могли бы просто сделать это вместо:

$(document).ready(function ()
{
    function myfunction()
    {
        // note the use of "this" rather than a function argument
        $(this).fancybox({
            'autoScale': true,
            'transitionIn': 'elastic',
            'transitionOut': 'elastic',
            'speedIn': 500,
            'speedOut': 300,
            'autoDimensions': true,
            'centerOnScroll': true
        });
    }

    $('a[href=#modalMine]').each(myfunction);
});

Basic demo (no images) →

Ответ 2

Если вы хотите просто открыть fancybox при вызове функции javascript. Возможно, в вашем потоке кода, а не в результате щелчка. Вот как вы это делаете:

function openFancybox() {
  $.fancybox({
     'autoScale': true,
     'transitionIn': 'elastic',
     'transitionOut': 'elastic',
     'speedIn': 500,
     'speedOut': 300,
     'autoDimensions': true,
     'centerOnScroll': true,
     'href' : '#contentdiv'
  });
}

Это создает поле с помощью "contentdiv" и открывает его.

Ответ 3

Что вам нужно:

$.fancybox.open({ .... });

См. раздел "Методы API" внизу внизу:

http://fancyapps.com/fancybox/

Ответ 4

Вам не нужно добавлять свой собственный обработчик событий click вообще. Просто инициализируйте элемент с помощью fancybox:

$(function() {
    $('a[href="#modalMine"]').fancybox({
        'autoScale': true,
        'transitionIn': 'elastic',
        'transitionOut': 'elastic',
        'speedIn': 500,
        'speedOut': 300,
        'autoDimensions': true,
        'centerOnScroll': true  // as MattBall already said, remove the comma
    });
});

Готово. Fancybox уже привязывает обработчик click, который открывает окно. Посмотрите раздел HowTo.


Позже, если вы хотите программно открыть окно, поднимите событие click на этот элемент:

$('a[href="#modalMine"]').click();

Ответ 5

Создание объекта аргумента продолжается от <a>, и используйте open функцию fancybox в событии click через делегат.

    var paramsFancy={
         'autoScale': true,
         'transitionIn': 'elastic',
         'transitionOut': 'elastic',
         'speedIn': 500,
         'speedOut': 300,
         'autoDimensions': true,
         'centerOnScroll': true,
         'href' : '#contentdiv'
      };

    $(document).delegate('a[href=#modalMine]','click',function(){
               /*Now you can call your function ,
   you can change fields of paramsFancy via this function */
                 myfunction(this);

                paramsFancy.href=$(this).attr('href');
                $.fancybox.open(paramsFancy);

    });

Ответ 6

Вам не нужно запускать событие click, вы можете сделать это с помощью fancybox type как ajax.  

$.fancybox.open({
      href: "http://........",
      type: 'ajax'
});

Ответ 7

Ответы немного сложнее. Надеюсь, я не понял этого вопроса неправильно.

Если вы просто хотите открыть причудливый бокс с одного щелчка на тег "A". Просто установите html в

<a id="my_fancybox" href="#contentdiv">click me</a>

Содержимое вашего окна будет находиться внутри div с id "contentdiv", а в вашем javascript вы можете инициализировать fancybox следующим образом:

$('#my_fancybox').fancybox({
    'autoScale': true,
    'transitionIn': 'elastic',
    'transitionOut': 'elastic',
    'speedIn': 500,
    'speedOut': 300,
    'autoDimensions': true,
    'centerOnScroll': true,
});

Это покажет fancybox, содержащий "contentdiv", когда щелкнут тэг привязки.

Ответ 8

Вот рабочий код в соответствии с текстом "Советы и рекомендации" , разместите его в документе:

  $("#mybutton").click(function(){
    $(".fancybox").trigger('click');  
  })

Это запускает меньшую версию отображаемого в данный момент изображения или содержимого, как если бы вы нажали на него вручную. Он избегает инициализации Fancybox снова, но вместо этого сохраняет параметры, которые вы инициализировали с готовностью документа. Если вам нужно сделать что-то другое, открыв окно с отдельной кнопкой по сравнению с нажатием на поле, вам понадобятся параметры, но для многих это будет то, что они искали.

Ответ 9

Если jQuery.fancybox.open недоступен (на fancybox 1.3.4), вам может понадобиться использовать semafor для решения проблемы рекурсии:

<a href="/index.html" onclick="return myfunction(this)">click me</a>

<script>

var clickSemafor = false;
myfunction(el)
{
 if (!clickSemafor) {
   clickSemafor = true; 
   return false; // do nothing here when in recursion
 }
 var e = jQuery(el); 
 e.fancybox({
    type: 'iframe',
    href: el.href
  }); 
 e.click();  // you could also use e.trigger('click');
 return false; // prevent default

}
</script>

Ответ 10

function myfunction(){
    $('.classname').fancybox().trigger('click'); 
}

Это работает для меня..

Ответ 11

...
<div class="img_file" style="background-image: url('/upload/test/14120330.jpg')" data-img="/upload/test/14120330.jpg"></div>
<div class="img_file" style="background-image: url('/upload/test/14120330.jpg')" data-img="/upload/test/14120330.jpg"></div>
...
if($(".img_file[data-img]").length) {
                var imgs_slider_img = [];
                $(".img_file[data-img]").each(function(i) {
                    imgs_slider_img.push({
                        href:$(this).attr('data-img')
                    });
                    $(this).attr('data-index-img', i);
                }).on("click", function(e) {
                    e.preventDefault();
                    $.fancybox.open(imgs_slider_img, {
                         index: $(this).attr('data-index-img'),
                         padding: 0,
                         margin: 0,
                         prevEffect: 'elastic',
                         nextEffect: 'elastic',
                         maxWidth: '90%',
                         maxHeight: '90%',
                         autoWidth: true,
                         autoHeight: true
                    });
                });
            }
...