JavaScript toUpperCase()不工作

JavaScript toUpperCase()不工作,javascript,Javascript,我试图制作一个小脚本,确定输入的文本是完全大写、完全小写还是两者都不大写。在这里: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <script&g

我试图制作一个小脚本,确定输入的文本是完全大写、完全小写还是两者都不大写。在这里:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<script>
function caps (p1){
console.log ("yes");
if (p1.toUpperCase() == p1){
    alert ("Is uppercase")
}
else if (p1.toLowerCase() == p1){
    alert ("Is lowercase")
}
else {
    alert ("Is mix of both");
}
}
</script>

<form id="form1" name="form1" method="post" action="">
  <p>
    <label>Write something<br />
      <input type="text" name="numero" id="numero" />
    </label>
  </p>
  <p>
    <input onclick="caps(numero)" type="submit" name="button" id="button" value="Submit" />
  </p>
</form>
</body>
</html>

无标题文件
功能盖(p1){
console.log(“是”);
如果(p1.toUpperCase()==p1){
警报(“大写”)
}
else if(p1.toLowerCase()==p1){
警报(“是小写的”)
}
否则{
警惕(“两者的混合”);
}
}

写点东西


然而,它不起作用;Firefox Web控制台坚持认为“toUpperCase()”不是有效的方法。这里发生了什么事

在您的
onclick
中,您可以这样调用函数:
caps(numero)

这不是作为
字符串传递
numero
。它将其作为变量名传递。未定义的
.toUpperCase
字符串
上的方法,在
未定义
上不存在

相反,请尝试:
caps('numero')

或者,如果您试图传递文本输入的值:

caps(document.getElementById('numero').value)

也许更好的是,将其纳入您的功能中:

function caps (id) {
    var p1 = document.getElementById(id).value
    if (p1.toUpperCase() == p1){
        alert ("Is uppercase")
    }
    else if (p1.toLowerCase() == p1){
      alert ("Is lowercase")
    }
    else {
      alert ("Is mix of both");
    }
}

通过这种方式,您可以像调用
onclick=“caps('numero')”
一样调用它,传入输入的
id
,该输入的值要大写

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
function caps (p1)
{
console.log (p1); //see here 
console.log (p1.value);
if (p1.value.toUpperCase() == p1.value){
    alert ("Is uppercase")
}
else if (p1.value.toLowerCase() == p1.value){
    alert ("Is lowercase")
}
else {
    alert ("Is mix of both");
}
}
</script>
</head>
<body>

<form id="form1" name="form1" method="post" action="">
  <p>
    <label>Write something<br />
      <input type="text" name="numero" id="numero" />
    </label>
  </p>
  <p>
    <input onclick="caps(numero)" type="submit" name="button" id="button" value="Submit" />
  </p>
</form>

</body>
</html>

无标题文件
功能盖(p1)
{
console.log(p1);//请参见此处
console.log(p1.value);
if(p1.value.toUpperCase()==p1.value){
警报(“大写”)
}
else if(p1.value.toLowerCase()==p1.value){
警报(“是小写的”)
}
否则{
警惕(“两者的混合”);
}
}

写点东西

不是
p1.toUpperCase()==p1
,p1代表
input
dom元素,其中id=“p1”

没有
touppercase
方法,只有字符串有此方法,所以应该使用p1.value


document.getElementById(p1)
等于
p1
p1
是id名称

我认为您没有正确传递选择器。在这种情况下,您应该使用document.getElementsByName(“numero”),实际上,变量
numero
将自动引用输入元素。我想您只是想传递
numero.value
。当有疑问时,
console.log(p1)
可以帮助您判断实际数据是什么。谢谢!成功了!我似乎严重误解了“弱类型”的含义(我是一个异教徒)。仅供参考,我意识到我在散布上面的错误信息。(稍后我将编辑答案)。您可以将
numero
作为变量传递。DOM自动根据元素ID神奇地创建全局变量,因此说
numero
大致相当于说
document.getElementById('numero')
。不确定这是否是一个好的做法,或者是否有任何警告。如果只是为了清楚起见,我可能会选择更详细的方法。为什么我的答案没有用?