Javascript 未捕获引用错误函数未定义,如何将typeof与if-else一起使用?
我试图获取用户在文本字段中输入的姓名的首字母(大写字母)。我得到一个错误,我的函数getInitials()没有定义。为什么会出现这个错误?我还想检查函数是否存在typeofJavascript 未捕获引用错误函数未定义,如何将typeof与if-else一起使用?,javascript,function,undefined,Javascript,Function,Undefined,我试图获取用户在文本字段中输入的姓名的首字母(大写字母)。我得到一个错误,我的函数getInitials()没有定义。为什么会出现这个错误?我还想检查函数是否存在typeof <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Second task HS</title>
</head>
<body>
<form name="myForm" id="eForm" action="#">
<label for="name">Name</label>
<input type="text" id="name" name="fullname"/><br>
<input name="button" type="button" value="Pick" onclick="getInitials();"/>
</form>
<div id="result">
</div>
<script type="javascript">
var nameInput = document.getElementById('name').value;//I need to stringify the input and use it!
var arr, nameArr, first, last;
nameArr = name.split(' ');
first = nameArr[0][0].toUpperCase();
last = nameArr[nameArr.length - 1][0].toUpperCase();
if(typeof getInitials == 'function'){
function getInitials(nameArr) {
return {first: first, last: last};
}
getInitials(nameInput);
}else{
alert('Check getInitials!');
}
</script>
</body>
</html>
第二项任务
名称
var nameInput=document.getElementById('name')。值//我需要将输入字符串化并使用它!
var arr、nameArr、first、last;
nameArr=name.split(“”);
first=nameArr[0][0].toUpperCase();
last=nameArr[nameArr.length-1][0].toUpperCase();
if(getInitials的类型=='function'){
函数getInitials(nameArr){
返回{first:first,last:last};
}
getInitials(名称输入);
}否则{
警报('Check getInitials!');
}
在我看来,您正在检查函数是否存在。。。在创建它之前
尝试以下JS代码:
function getInitials( nameInput ) {
var nameArr = nameInput.split(' ');
return {
first: nameArr[0][0].toUpperCase(),
last: nameArr[nameArr.length - 1][0].toUpperCase()
};
}
function getInitialsFromInput() {
var nameInput = document.getElementById('name').value;
if(getInitials instanceof Function){ //strictly speaking, useless because it is obviously a function
alert(getInitials(nameInput));
}else{
alert('Check getInitials!');
}
}
getInitialsFromInput() ;
(并在onclick中使用“getInitialsFromInput()”来收集输入值)您的代码毫无意义
getInitials
只是最初没有分配,因此按钮中的内联单击处理程序永远不会工作
如果需要首字母大写和首字母大写的输入值,请尝试以下操作:
document.querySelector('button[value=Pick]').onclick = getInitials;
function getInitials(e) {
var value = document.querySelector('#name')
.value.split(/\s+/)
.map( first2Upper );
if (value[0].length){
var ret = {first: value[0],
last: value[1],
initials: value[0][0] +(value[1] && value[1][0] || '')};
document.querySelector('#result').innerHTML =
value.join(' ') + ' (initials: '+ret.initials+')';
return ret;
} else {
alert('please enter a value');
}
}
function first2Upper(str) {
return str.slice(0,1).toUpperCase() + str.slice(1);
}
这里是您错过了
中的文本,语句应该是这样的
这是你想要的东西的简单版本,试试看,这个程序只需要名字或名字和姓氏
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Second task HS</title>
<script type="text/javascript">
var arr, first, last;
function getInitials() {
var nameInput = document.getElementById('name').value; //I need to stringify
nameArr = nameInput.split(' ');
if(nameArr.length > 1){
first = nameArr[0].toUpperCase();
last = nameArr[1].toUpperCase();
}else{
first = nameInput.toUpperCase();
}
var result = {first: first, last: last};
alert(result.first);
alert(result.last);
}
</script>
</head>
<body>
<label for="name">Name</label>
<input type="text" id="name" name="fullname"/><br>
<input name="button" type="button" value="Pick" onclick="getInitials()"/>
<div id="result">
</div>
</body>
</html>
第二项任务
var arr,first,last;
函数getInitials(){
var nameInput=document.getElementById('name').value;//我需要字符串化
nameArr=nameInput.split(“”);
如果(nameArr.length>1){
first=nameArr[0].toUpperCase();
last=nameArr[1].toUpperCase();
}否则{
first=nameInput.toUpperCase();
}
var result={first:first,last:last};
警惕(结果第一);
警报(result.last);
}
名称
您是否试图从用户处获取大写字母的名称?是,然后它会选择第一个字母。我不明白为什么函数未定义。请查看我的答案。错误,name.split(“”)[0][0]
将返回第一个数组项的第一个字符(或者如果name
是空字符串,则undefined
)。它与name.split(“”)[0].charAt(0)
相同。第一行和第三行现在相同。这是故意的吗?@Pavlo你应该申请一份校对员的工作;)。谢谢,更正了是的,我只是修改了它,只给我first=nameArr[0][0]的首字母;last=nameArr[nameArr.length-1][0].toUpperCase();