2014-10-04 2 views
0

Я построил небольшую игру, и все работает софа, за исключением ограничения пользователя, вводящего номер дважды.jQuery сравнить входное значение с объектами диапазона

Пользователь вводит число;

<form> 
<input id="input" type="text" /> 
<input id="button" type="submit" value="Guess" /> 
</form> 

var guess = $input.val(); 

Номера (догадки) сортируются и сохраняются в диапазоне с догадками id.

$guesses.append('<span class="guess ' + responseClass + '">' + guess + " " +  '</span> '); 
    var sorted = $.makeArray($('#guesses span')).sort(function(a, b) { 
     return (parseInt($(a).text()) < parseInt($(b).text())) ? -1 : 1; 
    }); 
$('#guesses').html(sorted); 

Как я могу сравнить входное значение (угадывание) с числами, хранящимися в #guesses? Допустим, я вхожу в 50, а затем снова 50 - я хочу, чтобы моя программа сообщила мне «уже введенный номер» или что-то подобное.

ответ

1

Основное место хранения для догадок не должно быть span, но переменная guesses. Это нормально, если на странице есть span, но он должен быть обновлен только для синхронизации с переменной guesses. Это связано с тем, что переменные предназначены для хранения данных общего назначения, поэтому вы можете легко манипулировать ими разными способами, но span s предназначены только для хранения элементов HTML для отображения пользователю, поэтому с ними сложнее делать другие вещи , В этом случае переменная guesses может быть Array. Вы должны инициализировать его с помощью var guesses = [];. Чтобы добавить догадку и сохранить guesses отсортированный:

guesses.push(guess); 
guesses.sort(); 
redisplayGuesses(guesses); // if you actually want this 

function redisplayGuesses(guesses) { 
    $guessesOnPage = $('#guesses'); 
    // overwrite all previous guesses on the page, to make synchronization simple 
    $guessesOnPage.empty(); // remove guess elements 
    guesses.forEach(function(guess) { 
     $guessesOnPage.append($("<span class=" + responseClass + ">" + guess + "</span>")); 
    }); 
} 

Это использует .push и .sort изменить массив. redisplayGuesses использует .empty для удаления существующих дочерних элементов, а затем .append s их снова в цикле .forEach.

И за то, что вы спросили, как сказать, если догадка уже догадались:

if (guesses.indexOf(guess) === -1) { 
    // guess not found 
    processNewGuess(guess); 
} else { 
    // the guess was found in `guesses` 
    alert("You already guessed this. Guess a different number."); 
} 

При этом используется метод .indexOf, который можно использовать на Array с, но не span s.

+0

Похоже на то, что я после, проверим. Большое спасибо! – Verd1

+0

Да, это сработало как шарм - теперь моя игра исполняется по желанию. Большое спасибо за помощь и советы Рори! – Verd1