我正在制作一个刽子手游戏,我正在编写一个函数来搜索单词中的一个字母。因此,当用户点击一封信时,我会抓住那里的文字并在所选单词中搜索它。
我写的代码是:
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的值;即在单词中找不到该字母。
我无法弄清楚它在这里做错了什么!!
非常感谢任何输入,
由于
答案 0 :(得分: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")
}
}
以这种方式组织代码可以减少在代码中引入错误的可能性,因为上下文仅在代码的一小部分内部进行管理。
答案 1 :(得分: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.');
}
});
答案 2 :(得分:-1)
你用全局变量声明了吗? (检查范围):
var letter = ''
为什么不更喜欢在搜索功能的参数列表中传递变量?