Генератор имен Javascript

Я пытаюсь сделать JS вывести полное имя на основе ввода как переключателей, так и текста. У меня проблема, так как я хочу, чтобы она выводила выбор человека, но всякий раз, когда я нажимаю на мужчину или женщину, он всегда отображается как "мужчина" (плюс текст). Код, который у меня есть на данный момент для вывода:

window.onload = initAll;

function initAll() {
document.getElementById("sillySubmit").onclick = function() {
 document.getElementById("msgField").innerHTML = getSillyName();
 return false;
}
}

function getSillyName() {

var x = $('input[id]').click(function() {
 ($('input[id]:checked').val()); 
});

var lastName1 = ["lots of names"]; 

var lastName2 = ["lots more names" ]; 

var lastNm = document.getElementById("lName").value.toUpperCase();
var validName = true;

if (lastNm == "") {
 validName = false;
}
else {
 var lastNum1 = lastNm.charCodeAt(0) - 65;
 var lastNum2 = lastNm.charCodeAt((lastNm.length-1)) - 65;

 if (lastNum1 < 0 || lastNum1 > 25 || lastNum2 < 0 || lastNum2 > 25) {
 validName = false;
 }
} 

if (!validName) {
 document.getElementById("lName").focus();
 document.getElementById("lName").select();
 return "I say. Something gone a bit squiffy here. Try again...";
}
return "Your name is " + x + ' ' + lastName1[lastNum1] + ' '
+ lastName2[lastNum2]; //add in comparisons later on

}

где "х" обозначает самца, а "у" - самка. Что я могу добавить/изменить, чтобы отобразить правильное предпочтение?

3 ответа

Я не вижу ваш html, поэтому я должен догадываться. Я предполагаю, что у вас много элементов ввода, все с атрибутом id, а ваши женские/мужские кнопки - два из них. Эти кнопки имеют значение "включено" или "выключено", а в некоторых браузерах всегда "включено". Так что не ищите значения. Дальнейшие переключатели имеют checked свойство как true, так и false. Чтобы получить состояние, вам не нужно прикреплять обработчик щелчка.

Итак, первые строки вашего getSillyName() могут выглядеть так:

function getSillyName() {
 var x;
 if (document.getElementById(/* female id here */).checked) {
 x = 'Mrs.' // change string to whatever you want to see
 } else if (document.getElementById(/* male id here */).checked) {
 x = 'Mr.' // as above
 } else x = 'cat'; // possibly both are unchecked
 /* the very important next line in your code should be: */
 console.log(x);
 /* this important line move step by step further down your code */
 console.log(/* and put in here what you want to check */);

 /* rest of code here */
}

После этого ваш элемент #msgField должен что-то показать.


Попробуйте определить имя перед возвратом значения.

if(gender == 'male')
 firstname = ...
else
 firstName = ...
return 'Your name is ' + firstname + ' ' + lastName1[lastNum1] + ' ' + lastName2[lastNum2];

Надеюсь, это поможет.


Что я могу добавить/изменить, чтобы отобразить правильное предпочтение?

Если я правильно понял, ответ будет: круглые скобки.

Код будет выглядеть следующим образом:

"Your name is " + (x || y) + ' ' + lastName1[lastNum1] + ' ' + lastName2[lastNum2];

licensed under cc by-sa 3.0 with attribution.