-4

我从我的程序员(外包)那里得到了这段代码:

<script type="text/javascript">
  $(function(){
     $('#notif-icons > li > a, #top-menu > li > a').click(function() {
         var clicked = $(this).next('.popup-notif');
         $('.popup-notif').not(clicked).fadeOut('fast');
         clicked.slideToggle('fast');
     }).toggle(function(){
        $(document).click(function() {
            $('.popup-notif').fadeOut('fast');
        });
        $('.popup-notif').click(function(e) {
            e.stopPropagation();
        });
     }, function() {
     });
  });
</script>

该代码在纯 HTML 中单独工作,但是当我放入我的代码时,它不再工作了,我认为该代码有问题。例如 :

}, function() {
         });
      });
    </script>

我不知道那个空函数()是用来做什么的……你们能帮帮我吗?因为我不是 JavaScript 方面的专家……谢谢!

**更新:此代码用于显示通知。一旦单击“通知图标”,就会出现“.popup-notif”,反之亦然。

4

2 回答 2

2

当你说你“把它放在你的代码中”(为什么你不在那里使用'z'?!!)时,你的意思是,当你将它逐字复制到 .js 文件中时?如果是这样,您也不会将<script>元素复制到 .js 文件中吗?与 HTML 内联的 JavaScript 需要一个<script>元素,.js 文件中的 JavaScript 不需要<script>并且</script>在 .js 文件内部,仅在引用 .js 文件的 HTML 中

于 2012-08-14T15:32:58.640 回答
1

代码实际上并没有那么糟糕。在这种情况下,toggle用作事件,而不是效果(参见http://api.jquery.com/toggle-event/)。传递给它的两个函数指定对$('#notif-icons > li > a, #top-menu > li > a')元素的偶数和奇数点击执行什么操作。

JavaScript 代码看起来会做它应该做的事情;检查您的 HTML 是否正确。确保$('#notif-icons > li > a, #top-menu > li > a')匹配正确的元素,并且.popup-notif每个 '#notif-icons > li > a, #top-menu > li > a'. 如果您不是每次都输入它,那么当您单击菜单项时,弹出窗口可能会神秘地消失(对此的修复留给读者作为练习)。

此外,请确保在加载相关 HTML之后加载 JavaScript;要么将其放在文件的底部,要么将其包装在$(document).ready(function(){[code goes here]}).

不幸的是,您的问题没有提供足够的细节,我无法提供更具体的答案;JavaScript 需要上下文(也就是给我们相关的 HTML)。

我不知道你个人的 JavaScript 技能水平如何;但一个快速提示:外包工作通常会导致工作,但不是很好的代码。牢牢掌握他们正在使用的任何技术是一个好主意,这样您就可以理解和使用他们所做的工作,而不是完全依赖它们。

于 2012-08-14T15:33:08.947 回答