2012-12-20 32 views
1

对于一个小拼图/记忆游戏,我想比较两个难题。如果他们是相同的(有相同的字母),我想提醒('匹配')。我认为我是正确的,但现在其中一个变量似乎超出了范围,因为我不知道我应该把代码放在哪里。所以现在它返回第二块,但第一块保持未定义状态。你能帮我吗?非常感谢!Jquery比较两个变量,看它们是否匹配,但是一个超出范围?

点击shuffle &显示,之后点击2件,你会看到'undefined'语句。 我想知道为什么它不工作,什么会使其工作,为什么:P

HTML

<button id="shuffle">Show and Shuffle</button> 

<div id="container"> 
    <div class="choices"><div class="letter">A</div></div> 
    <div class="choices"><div class="letter">B</div></div> 
    <div class="choices"><div class="letter">C</div></div> 
    <div class="choices"><div class="letter">A</div></div> 
</div> 

JS

var amountofclicks = 0; 
var firstcard = false; 
var secondcard = false; 

$('#shuffle').bind('click', function() { 

    var divs = $("div.choices").get().sort(function() { 
     return Math.round(Math.random()); 
    }).slice(0, 16); 

    $(divs).appendTo(divs[0].parentNode).show(); 

}); 

$('.choices').bind('click', function() { 

    if (amountofclicks < 2) { 
     amountofclicks++; 
     $(this).unbind('click'); 
     if (amountofclicks == 1) { 
      firstcard = true; 
      var txt = $(this).find('.letter').text(); 

     } 

     if (amountofclicks == 2) { 
      secondcard = true; 

      var txt2 = $(this).find('.letter').text(); 
      alert(txt + ' ' + txt2); 


     } 

    } 

}); 

JSFIDLLE WITH PROBLEM

回答

3

您需要将您的txt变量移到t之外他的功能可以在第二次点击时阅读。事情是这样的:

var amountofclicks = 0; 
var firstcard = false; 
var secondcard = false; 
var txt; // store here 

然后您需要删除从最初设定值就行了var

if (amountofclicks == 1) { 
    firstcard = true; 
    txt = $(this).find('.letter').text(); // note: 'var' removed 
} 

Working fiddle


使用难看的外部变量的另一种方法是在容器上设置一个data attibute,该容器具有第一张牌的价值,如下所示:

if (amountofclicks == 1) { 
    firstcard = true; 
    $("#container").data('first-letter', $(this).find('.letter').text()); 
} 

if (amountofclicks == 2) { 
    secondcard = true; 

    var txt = $("#container").data('first-letter'); 
    var txt2 = $(this).find('.letter').text(); 
    alert(txt + ' ' + txt2); 
} 

Example fiddle

+1

这不是一个范围问题。 js没有'if'作用域只是其中一个if语句块没有被输入 – kidwon

+1

@kidwon非常好的一点,我已经修改了对问题的描述。 –

+0

@Rory McCrossan谢谢你的回答:) – Opoe

1

你的代码的第一块似乎是确定。第二件不是。它可以变得更加容易

var amountofclicks = 0; 
var firstcard = false; 
var secondcard = false; 

$('#shuffle').bind('click', function() { 

    var divs = $("div.choices").get().sort(function() { 
    return Math.round(Math.random()); 
    }).slice(0, 16); 

    $(divs).appendTo(divs[0].parentNode).show(); 

}); 

var firstChoise = null; 

$('.choices').bind('click', function() { 
    var $self = $(this); 
    if (firstChoise == null) { 
    firstChoise = $self.find('.letter').html(); 
    } else if (firstChoise == $self.find('.letter').html()) { 
    alert('Choise: 2x'+firstChoise); 
    firstChoise = null; 
    } else { 
    alert('Choise: 1x'+firstChoise+' 1x'+$self.find('.letter').html()); 
    firstChoise = null; 
    } 
});​ 

http://jsfiddle.net/czGZZ/1/

+0

谢谢你的回答:) – Opoe

相关问题