Javascript 未捕获引用错误函数未定义,如何将typeof与if-else一起使用?

Javascript 未捕获引用错误函数未定义,如何将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

我试图获取用户在文本字段中输入的姓名的首字母(大写字母)。我得到一个错误,我的函数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/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();