【问题标题】:jQuery Flyout panel won't closejQuery Flyout 面板不会关闭
【发布时间】:2012-12-27 04:41:50
【问题描述】:

我制作了这个弹出式联系面板。在我把它放到我的 Wordpress 网站之前它工作得很好,然后它根本拒绝工作。这是它应该做的:

http://jsfiddle.net/XwTpE/1/

我发现如果我把jQuery(document).ready放在开头,它开始工作,但现在它不会关闭!当您点击关闭按钮时,它会重新打开。事实上,我注意到您在页面上单击的任何位置都会导致它重新打开。在此处查看演示:

http://jsfiddle.net/q9b7M/1/

希望这很容易解决!任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 这不是您使用 DOM Ready 处理程序的方式。您正在将点击处理程序绑定到 document

标签: jquery wordpress flyout


【解决方案1】:

你需要:

jQuery(document).ready(function() {
  jQuery('#contactFlyout').click(function()
 {
    jQuery(".togglepanel:visible").hide();
    jQuery("#contact_panel").animate({width:'toggle',height:'toggle'},200 );
});

// the close button
$('.closeDiv').click(function()
 {
    jQuery(".togglepanel:visible").animate({width:'toggle',height:'toggle'},200 );

});
});

见:http://jsfiddle.net/DcRHh/2/

或者您可以使用 Fabricio 指出的速记。虽然我会在 Wordpress 中坚持使用 jQuery 而不是 $,除非你知道在避免与其他脚本冲突时你在做什么。

【讨论】:

  • 你们太棒了!两种方法都可以完美运行,但我只是因为 Liam 的答案较少而将支票交给他 :) 感谢你们俩,感谢 Fabricio 提供的链接,以了解如何正确使用 DOM Ready 处理程序。
  • 通过在 3 分钟内进行检查,您也将有代表对答案进行投票。只是在说'。没问题。 :P
  • 没问题@danzo - 随时
【解决方案2】:

这不是你使用DOM Ready handler的方式:

jQuery(function ($) { //shorthand for DOM Ready, put your code inside of it
  $('#contactFlyout').click(function () {
    $(".togglepanel:visible").hide();
    $("#contact_panel").animate({
      width: 'toggle',
      height: 'toggle'
    }, 200);
  });
  $('.closeDiv').click(function () {
    $(".togglepanel:visible").animate({
      width: 'toggle',
      height: 'toggle'
    }, 200);
  });
});

Fiddle

特殊的jQuery(function($){}) 语法对 WP 非常有用,因为它在 DOM 就绪处理程序范围内将 jQuery 别名回$。如果您不想一遍又一遍地输入jQuery,这将非常有用。

【讨论】:

  • 你是对的,我总是在 Wordpress 中使用 jQuery(function($){}),但过去我遇到过失败的问题,所以对于那些不知道的人冲突等我建议只使用 jQuery。或者有时如果该方法失败,我使用 var $j = jQuery.noConflict();然后在整个过程中使用 $j 来引用 jQuery,它也非常健壮。
  • @LiamBailey 是的,这将是对未来用户有用的数据。但是,如果您使用的插件(如果有的话)是使用 (function($){})(jQuery) 正确编写的,那么 DOM 就绪 jQuery(function($){}) 语法应该没有任何问题,因为 jQuery 作为 $ 参数传递到处理程序范围内。只要您的所有代码都在其中,您就可以安全地使用$ 在那里引用jQuery。
  • 另外,jQuery 会被 WP 自动放入 noConflict 对吧? var $j = jQuery; 也应该足够了。 =]
  • 确实,但在 Wordpress 中,您不仅需要担心 jQuery 插件,还需要担心 WP 插件...您可以有几十个 jQuery 的 sn-ps,不幸的是它们不要总是以一致的方式调用或传递 jQuery,因此您会发现我们讨论的方式有时会失败。我发现我提到的第二种方式在 WP 环境中更加健壮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多