Откройте Fancybox (или его эквивалент) из формы ввода type = "submit" - PullRequest
16 голосов
/ 09 июня 2009

есть ли способ получить подарочную коробку (http://fancy.klade.lv/) или любой другой лайтбокс от отправки ФОРМЫ (с кнопкой изображения)?

HTML выглядит так:

<form action="/ACTION/FastFindObj" method="post">
  <input name="fastfind" class="fastfind" value="3463" type="text">
  <input name="weiter" type="submit">
</form>

Это не будет делать:

    $("form").fancybox();
    $("input").fancybox();
    $("input[name='weiter']").fancybox();

Любой, кто замечает мою ошибку или имеет обходной путь или альтернативу скрипт? Заранее спасибо

Ответы [ 9 ]

45 голосов
/ 11 марта 2010

Я полагаю, что все остальные ответы не соответствуют сути вопроса (если только я не являюсь единственным недоразумением). Я думаю, что автор хотел, чтобы он был таким, чтобы при отправке формы ее результаты отображались в окне для фантазии. Я не обнаружил, что какие-либо другие ответы предоставили такую ​​функциональность.

Чтобы добиться этого, я использовал плагин jQuery Form (http://malsup.com/jquery/form/), чтобы легко преобразовать форму в вызов ajax. Затем я использовал обратный вызов успеха, чтобы загрузить ответ в fancybox, используя ручной вызов $. FancyBox ().

$(document).ready(function() {
    $("#myForm").ajaxForm({
        success: function(responseText){
            $.fancybox({
                'content' : responseText
            });
        }
    }); 
});

Таким образом, вместо того, чтобы прикреплять fancybox к некоторому искусственному тегу , вы присоединяете ajaxForm к самой форме.

9 голосов
/ 18 августа 2009

Лучшая идея - использовать html на лету, т. Е.

$("#buttontoclick").click(function() {
    $('<a href="path/to/whatever">Friendly description</a>').fancybox({
        overlayShow: true
    }).click();
});
8 голосов
/ 04 августа 2009

ПОПРОБУЙТЕ

$(document).ready(function() {
  $("#link").fancybox();
  $("#btn").click(function(){
    $("#link").trigger('click');
  });
});

<input type="button" id="btn" value="Button" />
<div style="display:none;"> 
 <a href="#test" id="link">Click</a>
</div>

<div id="test" style="display:none;">fancy box content</div>

при нажатии кнопки вы запускаете щелчок по скрытой ссылке.

надеюсь, это поможет

6 голосов
/ 12 мая 2010

Fancybox может обрабатывать запросы ajax напрямую, без необходимости использования дополнительных скриптов jQuery.

$("#login_form").bind("submit", function() {

    $.ajax({
        type        : "POST",
        cache       : false,
        url         : "/login.php",
        data        : $(this).serializeArray(),
        success: function(data) {
            $.fancybox(data);
        }
    });

    return false;
});

<form action="/login.php" method="POST" id="login_form">
<input type="input" size="20" name="username" />
<input type="submit" value="Login" />
</form>
1 голос
/ 17 июня 2012

На основании

  • Оригинальное решение Garland Pope [less .ajaxForm]
  • Решение вызовов AJAX от Паоло Бергантино [в качестве замены .ajaxForm]
  • Обработчик загрузки анимации Fancybox от Myself [чтобы пользователь знал, что контент загружается]

-

$(document).ready(function() {
    $("#myForm").submit(function() {
        $.fancybox.showLoading(); // start fancybox loading animation
        $.ajax({
            data: $(this).serialize(), // get the form data
            type: $(this).attr('method'), // GET or POST
            url: $(this).attr('action'), // the file to call
            success: function(response) { // on success..
                $.fancybox({ 'content' : response }); // target response to fancybox
            },
            complete: function() { // on complete...
                $.fancybox.hideLoading(); //stop fancybox loading animation
            }
        });
        return false; // stop default submit event propagation
    }); 

});
0 голосов
/ 17 июня 2012

Это решение может служить вашей цели:

  • без вызовов ajax
  • используйте fancybox's iframe type option
  • pass url [+ data, через jquery serialize method] в fancybox's href option
  • загрузка анимации автоматическая

-

$(document).ready(function(){
        $('#yourform').submit(function() {
            var url = $(this).attr("action") + "?" + $(this).serialize();
            $.fancybox({
                href: url,
                'type': 'iframe'
            });
            return false;
        });
});
0 голосов
/ 23 марта 2012

Я только что боролся с этим и нашел способ отобразить результаты в окне iframe of fancy, я не очень хорошо разбираюсь в ajax, поэтому мне нужно решение php, использующее jquery любым способом, мой первый ответ !! :

В вашем файле jquery.fancybox js нужно будет немного подправить, я использовал jquery.fancybox.1.3.4.pack.js. откройте его в любом редакторе и т. д. и найдите: name="fancybox-frame: вот и все, должен быть только один найденный экземпляр, который будет выглядеть так:

 name="fancybox-frame'+(new Date).getTime()+'"

Теперь вы хотите переименовать все:

fancybox-frame'+(new Date).getTime()+'` 

на все, что вы хотите, я просто назвал это: "fbframe" и сохраните файл. Теперь добавьте настройки jquery и создайте их следующим образом, и они должны нормально работать:

//activate jquery on page load and set onComplete the most important part of this working

$(document).ready(function(){

        $("#a").fancybox({
                'width'             : '75%',
                'height'            : '100%',
                'autoScale'         : false,
                'type'              : 'iframe',
                'onComplete':function (){$('#formid').submit();},
            }); 
         });

//function called onclick of form button.      
function activatefancybox(Who){
    $("#setID").val(Who); // i set the value of a hidden input on the form
    $("#a").trigger('click');//trigger the hidden fancybox link

    }

// hidden link 
 <a id="a" href='#'></a> 

 // form to submit to iframe to display results. 
 // it is important to set the target of the form to the name of 
 // the iframe you renamed in the fancybox js file.
 <form name='iduser' id='iduser' action='page.php' target='fbframe' method='post'>
 <input />
 <input />
 <input id='setID' type='hidden' name='userid' value='' />
 <input type="button" onClick='testfb(123)' />
 </form>

Процесс:

нажмите кнопку отправить -> вызвать функцию -> функцию нажмите ссылку FB -> onComplete

onComplete Отправляет форму в iframe после ее загрузки FB! сделано.

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

0 голосов
/ 11 февраля 2010

Я просто должен был сделать это. Вот как я это сделал.

$('#elementid').fancybox({
   onStart : function() {
      $.post($(this).attr('href'), $('#formid').serialize());
   }
});

Таким образом, вы можете отправить форму и вызвать fancybox за один раз. Он отправляет форму в стиле ajax. Кнопка «отправить» должна быть в теге .

Надеюсь, это поможет.

0 голосов
/ 27 августа 2009

Вы можете сделать ajax отправку данных формы, сохранить данные в сеансе и затем нажать ссылку.

...