Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有人能告诉我为什么这段代码不';你不叫我那个函数吗?_Javascript_Html - Fatal编程技术网

Javascript 有人能告诉我为什么这段代码不';你不叫我那个函数吗?

Javascript 有人能告诉我为什么这段代码不';你不叫我那个函数吗?,javascript,html,Javascript,Html,实际上,我不知道为什么lengthselector1和lengthselector2不调用我的length()函数 此外,反转按钮不调用我的函数length()仅invert()函数 我不知道,因为只有lengthinput调用length()函数 有人能帮我处理这个代码吗?我觉得一切都很好 函数长度(){ var lengthinput=parseFloat(document.getElementById('lengthinput').value); var oper=document.ge

实际上,我不知道为什么
lengthselector1
lengthselector2
不调用我的
length()
函数 此外,反转按钮不调用我的函数
length()
invert()
函数 我不知道,因为只有
lengthinput
调用
length()
函数

有人能帮我处理这个代码吗?我觉得一切都很好

函数长度(){
var lengthinput=parseFloat(document.getElementById('lengthinput').value);
var oper=document.getElementById('lengthselector1')。值;
var oper2=document.getElementById('lengthselector2')。值;
if(oper=='k'&&oper2=='m'){
document.getElementById('lengthresult')。value=lengthinput*1000 | | 0;
}
如果(oper=='k'&&oper2=='d'){
document.getElementById('lengthresult')。value=lengthinput*10000 | | 0;
}
如果(oper=='k'&&oper2=='c'){
document.getElementById('lengthresult')。value=lengthinput*100000 | | 0;
}
if(oper=='k'&&oper2=='mi'){
document.getElementById('lengthresult')。value=lengthinput*1000000 | | 0;
}
如果(oper=='k'&&oper2=='mic'){
document.getElementById('lengthresult')。value=lengthinput*1.0000E+9 | | 0;
}
如果(oper=='k'&&oper2=='de'){
document.getElementById('lengthresult')。value=lengthinput*100 | | 0;
}
if(oper=='k'&&oper2=='h'){
document.getElementById('lengthresult')。value=lengthinput*10 | | 0;
}
如果(oper=='k'&&oper2=='me'){
document.getElementById('lengthresult')。value=lengthinput/1000 | | 0;
}
如果(oper=='k'&&oper2=='g'){
document.getElementById('lengthresult')。value=lengthinput/1000000 | | 0;
}
if(oper=='k'&&oper2=='z'){
document.getElementById('lengthresult')。value=lengthinput/1.0000E+18 | | 0;
}
if(oper=='k'&&oper2=='i'){
document.getElementById('lengthresult')。value=lengthinput*39370.0787 | 0;
}
如果(oper=='k'&&oper2=='a'){
document.getElementById('lengthresult')。value=lengthinput*1.0000E+13 | | 0;
}
}





公里 米 分米 厘米 毫米 微米 德卡迈特 百米 百万米 千兆米 泽塔梅特 英寸 埃 倒转 公里 米 分米 厘米 毫米 微米 德卡迈特 百米 百万米 千兆米 泽塔梅特 英寸 埃
如果调用的函数不是
length
,那么代码似乎可以工作。这肯定是某种保留词,非常通用。它可能被什么东西覆盖了。如果调用函数,例如,
calculateLength()
,它就可以工作

但是,您必须注意到,这种编码风格非常乏味和低效(手动逐个检查每个组合)。因为您有12个单位乘以12个单位,所以您必须将代码复制144次(!!),这是编码中的一个红色标志

更有效的方法是使用映射对象,然后是4行代码:

const$oper1=document.getElementById('lengthselector1');//缓存元素
const$oper2=document.getElementById('lengthselector2');
const$result=document.getElementById('lengthresult');
const$lengthInput=document.getElementById('lengthInput');
常数单位映射={
k:{
k:1,
m:1000,
d:10000,
c:100000,
mi:1000000,
麦克风:1.0000E+9,
de:100,
h:10,
我:千分之一,
g:1/1000000,
z:1/1.0000E+18,
i:39370.0787,
a:1.0000E+13
}
}
函数calculateLength(){
const lengthinput=parseFloat($lengthinput.value),
oper1=$oper1.value,
oper2=$oper2.value;
$result.value=长度输入*单位映射[oper1][oper2]| | 0;
}





公里 米 分米 厘米 毫米 微米 德卡迈特 百米 百万米 千兆米 泽塔梅特 英寸 埃 倒转 公里 米 分米 厘米 毫米 微米 德卡迈特 百米 百万米 千兆米 泽塔梅特 英寸 埃
您遇到了一个错误。始终保持开发人员控制台打开。我很确定问题在于函数的名称。如果您将函数的名称更改为更特殊的名称,或者在HTML之外分配事件处理程序(无论如何,这在许多方面都比较好),那么您可以绕过这个问题。您的意思是什么?我调用的函数的名称是正确的,我如何在web中打开开发人员控制台?问题与“onchange”等事件处理程序的工作方式有关。解释起来很复杂,但像“长度”这样的普通名称会引起问题。如果您将其称为“computeLength()”或其他什么,您将不会得到该错误。A ok,有点奇怪,但谢谢。“onfoo”事件处理程序函数的构建使得代码周围隐含着作用域层(基本上类似于带有语句的
)。所以它不像是一个保留字,而是“长度”解析为隐藏全局标识符的东西。不使用“onfoo”事件处理程序绑定的一个更好的原因是:)我真的很感谢你,我没有想到这一点:驻留,说实话,这部分代码对我没有帮助。。。它更快,但在有划分的地方/它不起作用,实际上这段代码也不起作用<