Jquery比较两个变量以查看它们是否匹配,但是一个超出范围?

时间:2012-12-20 14:39:36

标签: jquery variables compare match

对于小型益智/记忆游戏,我想比较两个难题。如果它们是相同的(具有相同的字母)我想要提醒('匹配')。我想我的方法是正确的,但现在其中一个变量似乎超出了范围,因为我不知道我的代码应放在哪里。所以现在它返回第二块,但第一块保持未定义。你能帮我吗?非常欣赏它!

点击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

2 个答案:

答案 0 :(得分:3)

您需要将txt变量移到函数外部,以便在第二次单击时读取它。像这样:

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 :(得分: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/