2017-02-22 9 views
-1

Я довольно новичок в JavaScript и jQuery, поэтому любой другой совет, который у вас есть, пожалуйста, оставьте в комментарии ниже. Я делаю карточную игру для воспроизведения на одном экране в javascript.Почему я получаю undefined при размещении строки html на главной странице с помощью jQuery?

Внутри div для id playerHand, я использую функцию javascript для вывода руки текущего хода игрока. Всякий раз, когда я выходной стороны текущего игрока, я получаю выход в этом DIV так:

undefined/ 6H/AD/7H/5H/6S/KC/8C/10H/AC/2H/8S/2D/3S 

Рука состоит из 13 карт (обозначаемых номерами 2-10 и J, Q, K, A с письмом для сердец, лопат, клубов и бриллиантов). Все 13 карт распечатываются в div правильно, но эта случайная неопределенная вещь неожиданна. Функция JavaScript, используемая для вывода этой информации, приведена ниже.

JavaScript JQuery функция:

function addHand() { 
    var htmlString; 
    for(i = 0; i < hands[currentPlayersTurn].handArray.length; i++) { 
    htmlString += "/ "+ hands[currentPlayersTurn].handArray[i].name +" "; 
    } 
    $("#playerHand").html(htmlString); 
} 
+1

_ «Функция JavaScript, используемая для вывода этой информации, приведена ниже в полном javascript-коде, но я вытащил определенную функцию, поэтому вам не нужно ее искать». _ Вы должны были разместить только [MCVE ], который воспроизводит проблему. Мы не хотим «полный код», а также не-самодостаточный фрагмент. Должно быть, в шестой раз я должен был сказать это сегодня; почему это сложно? –

+1

@LightnessRacesinOrbit, вероятно, потому, что все 6 раз это был другой пользователь, которому еще не сказали об этом и/или не волнует, пока приходит ответ. –

+0

@KevinB: Правильно. Однако доля вопросов, не показывающих [MCVE], растет. Даже не думали, что это возможно :(Почему людям нужно «рассказывать»? Почему они не видят, как работает сайт до публикации? _ Большой вздох. –

ответ

2

Ваши проблемы с var htmlString, так как вы не инициализируете его. Хотя даже если вы установите пустую строку, ваш результат будет не таким, как вы ожидаете, потому что вместо этого вы замените undefined/string/string/string на /string/string/string. Лучшим подходом было бы перевести список имен в массив, а затем присоединиться к ним на /.

function addHand() { 
    var htmlList = []; 
    for(var i = 0; i < hands[currentPlayersTurn].handArray.length; i++) { 
    htmlList.push(hands[currentPlayersTurn].handArray[i].name); 
    } 
    $("#playerHand").html(htmlList.join("/")); 
} 
+0

Это лучшее решение. –

+1

Не забудьте добавить 'var' перед' i' для его охвата (к функции). –

+0

@LightnessRacesinOrbit Спасибо, я даже не заметил, что это тоже не было init'd. – scrappedcola

2

Посмотрите здесь:

var htmlString; 

htmlString «s начальное "значение" является undefined.

Затем вы привязываете его посредством конкатенации строк и продолжаете добавлять к этому начальному значению. Это не «случайный» и «неожиданный»; это то, что вы запрограммировали в компьютер.

вероятно Вы имели в виду:

var htmlString = ""; 

так, чтобы начать с пустой строкой.

+0

А, спасибо, и я сохраню его минимальный следующий раз – xTaylorFerg