【问题标题】:How do I launch Colorbox for AJAX form submission in Drupal 7?如何在 Drupal 7 中为 AJAX 表单提交启动 Colorbox?
【发布时间】:2011-10-11 13:08:07
【问题描述】:

我正在使用对这个 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 is not a function,然后在同一窗口/选项卡中打开目标表单。

我正在使用安装并启用了 colorbox 模块的 Drupal 7。当将其用于链接、图像等时,颜色框方面适用于整个网站。

谁能告诉我我做错了什么?

【问题讨论】:

    标签: jquery drupal drupal-7 colorbox


    【解决方案1】:

    为了避免与其他库的冲突,从 Drupal 7 开始,jQuery 不再使用 $ 变量进行初始化(这在其他系统中也是常见的做法,而不仅仅是 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();
    }
    

    就我个人而言,我只会使用第二种方式,因为您已经写出了该代码:-)

    【讨论】:

    • 感谢克莱夫的回复。不幸的是,我仍然收到错误,只是现在它说 jQuery.colorbox 不是函数。
    • 听起来好像没有为该页面加载颜色框,您是否去过admin/config/media/colorbox并确保您的页面路径不在“停用特定页面上的颜色框”文本框中?
    • 我确认它正在为页面加载。我可以将图像或普通链接添加到可以很好地打开颜色框的内容。我只是无法将表单发布到颜色框。可能是范围问题?
    • 是的,听起来它一定是某种问题的范围,this question 的答案对您有帮助吗?
    • 感谢您的帮助。我通过使用一种完全不同的方法解决了这个问题,这种方法只是我刚刚想到的。我没有发布第一个表单的结果,而是从序列化数据构建 URL,然后使用颜色框加载它。 $('#email-link').click(function (){ $(this).attr('href', '/emailfriend/compare?'+$("#comparison-form").serialize()); });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多