2014-09-12 53 views
0

我想基于来自两个单选按钮和文本的输入使JS输出全名。我有一个问题,因为我希望它输出该人的选择,但无论何时单击男性或女性,它总是显示为男性(加上文本)。我此刻的输出得到的代码是:Javascript名称生成器

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 

}

其中“x”代表着男性和“y”是女性。我可以添加/更改哪些内容以显示正确的偏好?

+0

发布一些更多的代码 – 2014-09-12 12:37:35

+0

请分享整个函数代码片段,以便我们得到一个更好的主意。 – BaN3 2014-09-12 12:37:48

+0

你期望'||'做什么?它不起作用。 – Bergi 2014-09-12 12:39:26

回答

0

我看不到你的html,所以我不得不猜测很多。我假设你有很多输入元素,都带有一个id属性,而你的女性/男性按钮是其中的两个。这些按钮的值为“开”或“关”,并且在某些浏览器中它始终处于“开”状态。所以不要看重价值。其他单选按钮有一个属性checked或者是truefalse。 您不需要附加点击处理程序来获取状态。

所以你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应该显示。

0

我可以添加/更改什么,以便显示正确的偏好?

如果我理解正确,答案将是:括号。

代码将变为:

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

尝试返回之前定义的第一个名字。

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

我希望有帮助。