查看: 1006|回复: 13
打印 上一主题 下一主题

[求助] [已解决]请教 js 调用次数的问题

[复制链接]
  • TA的每日心情
    慵懒
    2021-11-14 21:48
  • 签到天数: 90 天

    [LV.6]常住居民II

    4

    主题

    75

    回帖

    707

    积分

    举人

    Rank: 4

    积分
    707
    跳转到指定楼层
    1
    发表于 2018-5-9 21:42:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 vigorous 于 2018-5-10 19:32 编辑

    GoldenDict 开启构词法之后,有时会出现多个词条,比如输入 "apartment" 会出现两个词条(apartment 和 apart)显示在一个页面。
    但是不清楚怎么回事,会出现同一个 js (函数?)调用两次情况,应该如何避免呢?

    test.html 代码(在 GoldenDict 中大概显示这个样子):
    1. <html>
    2.     <head> </head>
    3.     <body>
    4.         <div class="mdict">
    5.             <script src="jquery-3.js" charset="utf-8" type="text/javascript" language="javascript"></script>
    6.             <script src="test.js" charset="utf-8" type="text/javascript" language="javascript"></script>
    7.             <div class="a">
    8.                 AAA
    9.                 <span class="b">
    10.                     BBB
    11.                 </span>
    12.             </div>
    13.         </div>
    14.         <div class="mdict">
    15.             <script src="jquery-3.js" charset="utf-8" type="text/javascript" language="javascript"></script>
    16.             <script src="test.js" charset="utf-8" type="text/javascript" language="javascript"></script>
    17.             <div class="a">
    18.                 CCC
    19.                 <span class="b">
    20.                     DDD
    21.                 </span>
    22.             </div>
    23.         </div>        
    24.     </body>
    25. </html>
    复制代码

    test.js 代码:
    1. jQuery(function(){
    2.     $(".a").click(function(){$(this).children(".b").toggle();});
    3. });
    复制代码

    我想点击 AAA 或者 CCC 实现切换显示后面的 BBB 或 DDD。
    但实际上点击 AAA 后,调用了两次 toggle(为什么会这样?),等于没有效果。

    本人完全小白,有没有稍微简单一点的方法,能让我明白这个问题该怎么解决,先谢谢了。

    ----------
    更新:
    谢谢各位,都是不错的方法,很受用!

    评分

    1

    查看全部评分

  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

    27

    主题

    556

    回帖

    15万

    积分

    状元

    喜欢折腾,但能力有限

    Rank: 9Rank: 9Rank: 9

    积分
    150901

    灌水大神章笑傲江湖章管理组专用章

    2
    发表于 2018-5-9 22:28:59 来自手机 | 只看该作者
    可以在底部加一个全局变量,前面函数执行的时候对这个全局变量做个判断,true则返回。false才执行。

    评分

    1

    查看全部评分

  • TA的每日心情
    慵懒
    2018-8-25 12:29
  • 签到天数: 91 天

    [LV.6]常住居民II

    33

    主题

    282

    回帖

    4万

    积分

    版主

    新的一天 , 新的难过

    Rank: 10Rank: 10Rank: 10

    积分
    40688

    灌水大神章笑傲江湖章QQ 章翰林院专用章管理组专用章小蜜蜂章

    QQ
    3
    发表于 2018-5-10 00:43:26 | 只看该作者
    本帖最后由 garypang 于 2018-5-10 00:45 编辑
    须佐之男 发表于 2018-5-9 22:28
    可以在底部加一个全局变量,前面函数执行的时候对这个全局变量做个判断,true则返回。false才执行。 ...


    好想法,但这全局变量肯定不能加在这词典里面,不然每次都会被初始化掉,Goldendict的话除了词典,没有其他途径加载JS了,问题是有哪部词典能做到查所有词都有结果呢,词典词条又不支持正则匹配所有词条
  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

    27

    主题

    556

    回帖

    15万

    积分

    状元

    喜欢折腾,但能力有限

    Rank: 9Rank: 9Rank: 9

    积分
    150901

    灌水大神章笑傲江湖章管理组专用章

    4
    发表于 2018-5-10 01:33:28 | 只看该作者
    garypang 发表于 2018-5-10 00:43
    好想法,但这全局变量肯定不能加在这词典里面,不然每次都会被初始化掉,Goldendict的话除了词典,没有其他途 ...


    楼主碰到的问题应该是同一部词典的两个或两个以上词条被同时显示了,这个情况在欧路也有。
    1. if (!xxx) {需要执行的代码}
    2. var xxx = true;
    复制代码

    这么写,虽然js引入多次,但只执行一次。

    评分

    2

    查看全部评分

  • TA的每日心情
    开心
    2020-5-23 22:47
  • 签到天数: 128 天

    [LV.7]常住居民III

    1

    主题

    212

    回帖

    1745

    积分

    解元

    Rank: 5Rank: 5

    积分
    1745
    5
    发表于 2018-5-10 10:05:53 | 只看该作者
    本帖最后由 QQending2 于 2018-5-10 11:15 编辑

    错误判断已删除
    --------------------------------------

    以上好像不是关键所在……
    继续分析中
  • TA的每日心情
    开心
    2020-5-23 22:47
  • 签到天数: 128 天

    [LV.7]常住居民III

    1

    主题

    212

    回帖

    1745

    积分

    解元

    Rank: 5Rank: 5

    积分
    1745
    6
    发表于 2018-5-10 11:11:46 | 只看该作者
    本帖最后由 QQending2 于 2018-5-10 12:01 编辑

    我的上一个回复为制杖回复

    无意义回复,已编辑掉了


    ---------------------------------------
    又写错了……
  • TA的每日心情
    开心
    2018-1-29 01:48
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    12

    主题

    497

    回帖

    3万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    37070

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    7
    发表于 2018-5-10 11:31:00 | 只看该作者
    本帖最后由 fearfare090807 于 2018-5-10 11:54 编辑

    赞一下楼主描述问题的方式,非常清晰而且有诚意,居然做了个网页摘要出来,所以我不得不答一下
    这是我用在本人collins里的防重入代码
        if (typeof window.colcobuildoverhal_counter == 'undefined') {
            window.colcobuildoverhal_counter = 1;
        } else {
            return;
        }
    不需要声明任何变量,你放在任意位置都可以的,当然变量名你需要改一下

    评分

    1

    查看全部评分

  • TA的每日心情
    开心
    2018-1-29 01:48
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    12

    主题

    497

    回帖

    3万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    37070

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    8
    发表于 2018-5-10 11:32:56 | 只看该作者
    QQending2 发表于 2018-5-10 11:11
    我的上一个回复为制杖回复

                

    你弄错了
    楼主这么写是摘要了goldendict当时出问题的网页,而不是他这么写的
    所以,那个重复是goldendict造成的,你不可能去删goldendic的网页上的内容。
  • TA的每日心情
    开心
    2020-5-23 22:47
  • 签到天数: 128 天

    [LV.7]常住居民III

    1

    主题

    212

    回帖

    1745

    积分

    解元

    Rank: 5Rank: 5

    积分
    1745
    9
    发表于 2018-5-10 11:58:35 | 只看该作者
    本帖最后由 QQending2 于 2018-5-10 12:36 编辑

    我的解决方法代码:
    1、
    1. var isToggle = false;

    2. $(function(){
    3.     $(".a").click(function()
    4.         {
    5.         if (!isToggle){
    6.                 isToggle = true;
    7.                 console.log(isToggle);
    8.                 $(this).children(".b").toggle();
    9.                 }
    10.         else{ isToggle = false; }
    11.         });
    12.        
    13. });
    复制代码


    2、
    1. $(function(){
    2. console.log(isToggle);
    3.         if (!isToggle){isToggle = true;}
    4.         else{ return;}
    5.     $(".a").click(function()
    6.                 {$(this).children(".b").toggle();}       
    7.         );
    8. });
    复制代码



    FF大的解决方法代码:
    1. $(function(){

    2.         if (typeof window.toggle_test == 'undefined') {
    3.                 window.toggle_test = 1;
    4.         } else {return;}
    5.                
    6.     $(".a").click(function()
    7.         {
    8.                 $(this).children(".b").toggle();
    9.         });

    10. })
    复制代码


    其中有Return,放在主函数体内,如果不用Return,那就无所谓了。


    好了
    这样应该可以了。
    声明全局变量(var)要放在所有文件的最开头部分




    我百度到的声明全局变量的方式

       声明全局变量的4种方法。

       1.直接在全局作用域中用var 声明的变量就是全局变量,此种方式声明的变量具有不可配置的属性,不能使用delete操作符把变量删除。

       2.window.变量,这种声明的变量也是全局变量,但这种变量跟上面用var 声明的变量有点不一样,这种方式声明的全局变量是可配置的,因此能用delete操作符把变量删除。

       3.隐式声明全局变量,就是不使用var声明,直接进行赋值的变量,在不严格模式中,相当于window.变量这种方式,但在严格模式下,会报错。

       4.在html中给标签指定一个id属性,也相当于给Window对象添加了一个id的属性,在javascript中可直接通过标签的id访问该标签(或者window['id'])。


    FF大应该用到的是第二种window

    评分

    2

    查看全部评分

  • TA的每日心情
    开心
    2020-5-23 22:47
  • 签到天数: 128 天

    [LV.7]常住居民III

    1

    主题

    212

    回帖

    1745

    积分

    解元

    Rank: 5Rank: 5

    积分
    1745
    10
    发表于 2018-5-10 12:01:05 | 只看该作者
    本帖最后由 QQending2 于 2018-5-10 12:02 编辑
    fearfare090807 发表于 2018-5-10 11:32
    你弄错了
    楼主这么写是摘要了goldendict当时出问题的网页,而不是他这么写的
    所以,那个重复是goldendict ...


    这次改好了……的确是我弄错了
    一是我没有看清
    二是我自己本来就对这些很不了解,我也是看看别人会出现什么问题,顺便学习一下。
    反正都是要制作字典的嘛

    还有谢谢你的那个window方法。
  • TA的每日心情
    开心
    2020-5-23 22:47
  • 签到天数: 128 天

    [LV.7]常住居民III

    1

    主题

    212

    回帖

    1745

    积分

    解元

    Rank: 5Rank: 5

    积分
    1745
    11
    发表于 2018-5-10 12:07:17 | 只看该作者
    fearfare090807 发表于 2018-5-10 11:32
    你弄错了
    楼主这么写是摘要了goldendict当时出问题的网页,而不是他这么写的
    所以,那个重复是goldendict ...

    顺便请教一下
    FF大调试字典显示样式的时候使用的是Chrome么。
    如果不是,有什么好的推荐的么
    谢谢
  • TA的每日心情
    开心
    2018-1-29 01:48
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    12

    主题

    497

    回帖

    3万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    37070

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    12
    发表于 2018-5-10 12:21:30 | 只看该作者
    QQending2 发表于 2018-5-10 12:07
    顺便请教一下
    FF大调试字典显示样式的时候使用的是Chrome么。
    如果不是,有什么好的推荐的么

    我主要用火狐,偶尔用一下goldendict自带的那个调试器
    无论火狐还是chrome, 用来调试字典功能都是强大到溢出的
    你用习惯了chrome, 换来做什么?
  • TA的每日心情
    慵懒
    2021-11-14 21:48
  • 签到天数: 90 天

    [LV.6]常住居民II

    4

    主题

    75

    回帖

    707

    积分

    举人

    Rank: 4

    积分
    707
    13
     楼主| 发表于 2018-5-10 19:29:38 | 只看该作者
    感谢各位的热心回复,解决了我的疑惑,学到了好多

    4 楼须佐之男的方法很简洁,似乎要在外部声明一下才可以用吧?
    fearfare090807 大大的方法更加模块化,QQending2 还费心做了一番总结,真心有用!
    再次感谢~
  • TA的每日心情
    奋斗
    2018-7-14 09:06
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    14

    主题

    244

    回帖

    2592

    积分

    解元

    Rank: 5Rank: 5

    积分
    2592
    14
    发表于 2018-6-3 15:14:35 | 只看该作者
    fearfare090807 发表于 2018-5-10 11:31
    赞一下楼主描述问题的方式,非常清晰而且有诚意,居然做了个网页摘要出来,所以我不得不答一下
    这是我用在 ...

    遇到同樣問題,用這個方法解決了!