5

编辑**

我有这个点击事件

$('.next-question').click(function () {

    $('td').removeClass('highlight-problem');
    var r = rndWord;
    while (r == rndWord) {
        rndWord = Math.floor(Math.random() * (listOfWords.length));
    }
    $('td[data-word="' + listOfWords[rndWord].name + '"]').addClass('highlight-problem');
    $('td[data-word=' + word + ']').removeClass('wrong-letter').removeClass('wrong-word').removeClass('right-letter');
    var spellSpace = $('td[data-word=' + listOfWords[rndWord].name + ']').hasClass('right-word');
    if (spellSpace) {

        $('.next-question').trigger('click');

   } else {

        $("#hintSound").attr('src', listOfWords[rndWord].audio);
        hintSound.play();
        $("#hintPic").attr('src', listOfWords[rndWord].pic);
        $('#hintPic').show();
        $('#hintPicTitle').attr('title', listOfWords[rndWord].hint);
        $('#hintPicTitle').show();

    }

});

在控制台中调试时,它表示此时too much recursion它处于某种无限循环中。我想是因为声明中的trigger("click")事件if,因为我在网上看到过类似的东西。

基本上,我想说,如果给定的单词有类right-word然后继续(因此触发),否则......

还有另一种不会崩溃的写法吗?

这是一个小提琴:http: //jsfiddle.net/Dxxmh/112/

说明:单击右侧的字母以拼写网格中突出显示的区域(帮助您拼写单词的图像在小提琴中不可用,因此您必须使用控制台通过查找 td 来拼写它们)

4

4 回答 4

2

我会做这样的事情:

if (spellSpace) {
            if(score.right != 4)
                $('.next-question').trigger('click');

我看到likeif(score.right == 4)意味着游戏的结束。在它结束之后——你根本就没有词(或者只是没有“正确”的词,不确定),这就是它永远不会停止的原因。它只是触发永远单击而不是停止执行任何操作并等待用户单击重新启动按钮。

我想这个条件还不够。不确定如何计算和处理错误单词的数量。但这应该足以根据您的程序逻辑继续前进并建立正确的条件。您开始的任何递归(并且您使用 trigger("click") 启动它)都必须有一个停止条件。

于 2012-11-13T11:02:04.990 回答
2

.trigger('click')只会再次调用监听器。您是否打算仅在这种情况下访问该链接?在这种情况下,你可以return false在你的else场景中。

于 2012-11-13T10:26:41.873 回答
2

这不是 jQuery 问题:您正在从处理程序中手动触发相同的事件:

 $('.next-question').trigger('click');

现在,如果您不小心,这将导致无限循环。解决此问题的最佳方法不是通过第二次触发事件来调用处理程序,而是使用函数名调用它:

 $('.next-question').click(function callMe(event)
 {
      //replace: $('.next-question').trigger('click');
      //with this:
      if (spellSpace && event)
      {//also check if the event has been passed
          callMe.apply(this,[]);//don't pass event for recursive call
      }
 });
于 2012-11-13T10:29:05.280 回答
0

尝试使用这个:

$('.next-question').click(function (event) {
     event.preventDefault();
 });
于 2012-11-13T10:24:26.033 回答