Как запустить Colorbox для отправки формы AJAX в Drupal 7? - PullRequest
0 голосов
/ 11 октября 2011

Я отправляю форму, используя вызов этой функции JavaScript:

function emailFriend(){
  jQuery("form[name='comparisons']").attr("action", "/emailfriend/compare");
  jQuery("form[name='comparisons']").bind('submit', function() {
    jQuery.get(jQuery("form[name='comparisons']").attr("action"),
    jQuery("form[name='comparisons']").serialize(),
    function(data){                // send to colorbox
      $.colorbox({                 // this is where the error comes from
        html:   data,
        open:   true,
        iframe: true               // use iframe
      });
    },
    "html");
  });
  jQuery("form[name='comparisons']").submit();
}

Эта форма открывает другую форму, расположенную по адресу / emailfriend / compare.Вторая форма - это та, которую я пытаюсь открыть в colorbox.Приведенный выше код работает для открытия формы, но возвращает ошибку $.colorbox is not a function и затем открывает целевую форму в том же окне / вкладке.

Я использую Drupal 7 с установленным и включенным модулем colorbox.Аспект colorbox работает по всему сайту при использовании его для ссылок, изображений и т. Д.

Может кто-нибудь сказать мне, что я делаю неправильно?

1 Ответ

0 голосов
/ 11 октября 2011

Во избежание коллизий с другими библиотеками jQuery больше не инициализируется с переменной $, начиная с Drupal 7 (это обычная практика и в других системах, а не только в Drupal).Вам необходимо предоставить контекст для переменной $ или изменить $.colorbox на jQuery.colorbox:

(function($) {
  function emailFriend(){
    $("form[name='comparisons']").attr("action", "/emailfriend/compare");
    $("form[name='comparisons']").bind('submit', function() {
      $.get($("form[name='comparisons']").attr("action"),
      $("form[name='comparisons']").serialize(),
      function(data){                // send to colorbox
        $.colorbox({                 // this is where the error comes from
          html:   data,
          open:   true,
          iframe: true               // use iframe
        });
      },
      "html");
    });
    $("form[name='comparisons']").submit();
  }
})(jQuery);

или:

function emailFriend(){
  jQuery("form[name='comparisons']").attr("action", "/emailfriend/compare");
  jQuery("form[name='comparisons']").bind('submit', function() {
    jQuery.get(jQuery("form[name='comparisons']").attr("action"),
    jQuery("form[name='comparisons']").serialize(),
    function(data){                // send to colorbox
      jQuery.colorbox({                 // this is where the error comes from
        html:   data,
        open:   true,
        iframe: true               // use iframe
      });
    },
    "html");
  });
  jQuery("form[name='comparisons']").submit();
}

Лично я бы просто использовалВторой способ, как вы уже написали этот код: -)

...