2014-09-12 96 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]; 

我希望有幫助。