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")
     }
    }

变量 'letter' 是一个全局变量,根据点击的内容被赋予一个值:

    $(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 回答
-1

您是否声明了全局变量?(检查范围):

var letter = ''

为什么不喜欢在搜索函数的参数列表中传递变量呢?

于 2013-07-22T15:15:09.187 回答