0

私はハングマン ゲームを作成しており、単語内の文字を検索する関数を作成しています。そのため、ユーザーが文字をクリックすると、そこにあるテキストが取得され、選択した単語で検索されます。

私が書いたコードは次のとおりです。

    function searchLetter()
    {
     var aLetter = letter.toLowerCase();
     var aChosenWord = chosenWord.toLowerCase(); 
     //chosenWord is a global variable initialised in another function
     if(aChosenWord.indexOf(aLetter) != -1) 
     alert("Letter is there")
     else 
     {
         alert("Letter not found")
     }
    }

変数「文字」はグローバル変数であり、クリックされたものに基づいて値が与えられました。

    $(function(){
  $('a').click(function () {
      letter = $(this).text();
    $(this).slideUp();
    searchLetter()
});
    });

ここで何が間違っていたのかわかりません。アラートボックスをたくさん入れたところ、コードが文字を正しく取得しているようです。

ただし、これを実行すると、毎回 indexOf の値が -1 になります。つまり、その文字は単語の中にありません。

ここで何が間違っていたのかわかりません!!

どんな入力でも大歓迎です、

ありがとう

4

3 に答える 3

0

グローバル変数のコンテキストを作成することをお勧めします。たとえば、次のようになります。

jQuery(function($) {
    var chosenWord;

    $('a').click(function() {
        var $this = $(this);

        $this.slideUp();
        searchLetter($this.text(), chosenWord);
    });

    // link that generates new game?
    $('.generate-new-word').function() {
        chosenWord = generateNewWord();
    });
});

このsearchLetter()関数は引数として文字と単語を受け取るため、このコードから切り離されます。

単語生成機能を統合する方法の例も書きました。この関数と同様searchLetter()に、グローバルな状態に関する知識はありません。

これはあなたの実装になりますsearchLetter()

function searchLetter(letter, chosenWord)
{
   var aLetter = letter.toLowerCase();
   var aChosenWord = chosenWord.toLowerCase(); 

   if(aChosenWord.indexOf(aLetter) != -1) {
      alert("Letter is there")
   } else {
      alert("Letter not found")
   }
}

このようにコードを編成すると、コード内でバグが発生する可能性が低くなります。これは、コンテキストがコードのごく一部の内部のみで排他的に管理されるためです。

于 2013-07-22T15:26:51.957 に答える
0

私は不必要なグローバル変数の支持者ではありませんが、以下のコードは必要なことを行うはずです。

HTML

<span id="chosenWord">Some awesome word</span>
<br />
<a href="#" class="letter">a</a>
<a href="#" class="letter">b</a>
<a href="#" class="letter">d</a>
<a href="#" class="letter">e</a>

JS

var letter,
    chosenWord = document.getElementById('chosenWord');
$('a').on('click', function () {
    if (chosenWord.innerHTML.toLowerCase().indexOf($(this).text().toLowerCase()) !== -1) {
        console.log('Found ' + $(this).text())
    } else {
        console.log($(this).text() + ' not found.');
    }
});

JSFiddle デモ

于 2013-07-22T15:31:50.423 に答える