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

これはjQueryの問題ではありません。ハンドラー内から同じイベントを手動でトリガーしています。

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

注意しないと、これにより無限ループが発生します。これを修正する最善の方法は、イベントを2回トリガーしてハンドラーを呼び出すのではなく、関数名を使用してハンドラーを呼び出すことです。

 $('.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 に答える
2

.trigger('click')リスナーをもう一度呼び出すだけです。そのような状況でのみリンクをたどるつもりでしたか?その場合、あなたreturn falseはあなたのelseシナリオでそうすることができます。

于 2012-11-13T10:26:41.873 に答える
2

私はこのようなことをします:

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

if(score.right == 4)私は、ゲームの終わりを意味するように見えます。それが終わった後-あなたには言葉がまったくありません(または単に「正しい」言葉がない、確かではありません)、そしてそれがそれが決して止まらない理由です。何もするのをやめてユーザーが[再起動]ボタンをクリックするのを待つのではなく、クリックを永久にトリガーするだけです。

条件が足りないと思います。間違った単語の数がどのようにカウントされ、処理されるかわからない。ただし、プログラムロジックに基づいて前進し、正しい条件を構築するだけで十分なはずです。開始する(そしてtrigger( "click")で開始する)再帰には、停止条件が必要です。

于 2012-11-13T11:02:04.990 に答える
0

これを使用してみてください:

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