Открыть 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 - любая идея, как я могу это исправить? Я знаю, что нужно инициировать другое соединение, но я надеюсь, что возможно другое решение.
Ответы
Ответ 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
});
});
}
...