我有这两个javascript函数,并希望将它们“合并”为一个。 稍后我将添加一些这些转换函数,并希望保持简单和清洁,而不仅仅是复制函数。
<!--Convert kg in pnd-->
<script type="text/javascript">
function init(){
document.getElementById('kg').onmouseup=function() {
if(isNaN(this.value)) {
alert('numbers only!!');
document.getElementById('kg').value='';
document.getElementById('pnd').value='';
return;
}
document.getElementById('pnd').value=(this.value*2.2046).toFixed(1);
}
}
if(window.addEventListener){
window.addEventListener('load',init,false);
}
else {
if(window.attachEvent){
window.attachEvent('onload',init);
}
}
</script>
<!--Convert cm in feet-->
<script type="text/javascript">
function start(){
document.getElementById('hauteur_cm').onmouseup=function() {
if(isNaN(this.value)) {
alert('numbers only!!');
document.getElementById('hauteur_cm').value='';
document.getElementById('hauteur_pieds').value='';
return;
}
document.getElementById('hauteur_pieds').value=(this.value*0.03280839895).toFixed(1);
}
}
if(window.addEventListener){
window.addEventListener('load',start,false);
}
else {
if(window.attachEvent){
window.attachEvent('onload',start);
}
}
</script>
感谢您的帮助
答案 0 :(得分:1)
创建一个包含单元对列表的对象:
var unitPairs = [
{ from: 'kg', to: 'pnd', factor: 2.2046 },
{ from: 'hauteur_cm', to: 'hauteur_pieds', factor: 0.03280839895 },
/* ... */
];
然后你可以写一个处理所有这些的函数:
function init() {
for (var i = 0; i < unitPairs.length; ++i) {
var pair = unitPairs[i];
document.getElementById(pair.from).onmouseup = function() {
if (isNaN(this.value)) {
// ...
}
document.getElementById(pair.to).value = (this.value * pair.factor).toFixed(1);
}
// ...
}
}
此外,你应该使用像jQuery这样的框架来为你做一些事件绑定工作。
答案 1 :(得分:0)
我认为你的问题是你希望有2个不同的函数叫做onload,对吧?如果是这种情况,请考虑创建一个排队类(取自Javascript:权威指南):
function runOnLoad(f) {
if (runOnLoad.loaded) f();
else runOnLoad.funcs.push(f);
}
runOnLoad.funcs = [];
runOnLoad.loaded = false;
runOnLoad.run = function() {
for (var i = 0; i < runOnLoad.funcs.length; i++) {
try { runOnLoad.funcs[i](); }
catch(e) { }
}
delete runOnLoad.funcs;
delete runOnLoad.run;
};
然后,如果你包含这个文件,你需要做的就是在onload列表中添加另一个函数:
runOnLoad(init)
runOnLoad(start)
等
答案 2 :(得分:0)
这真的是你想要的猜测,因为你不是非常具体,但似乎你正在创建转换函数
function Conversion(ConvertFrom, ConvertTo)
{
document.getElementById(ConvertFrom).onmouseup=function() {
if(isNaN(this.value)) {
alert('numbers only!!');
document.getElementById(ConvertFrom).value='';
document.getElementById(ConvertTo).value='';
return;
}
switch(ConvertFrom + ">" + ConverTo)
{
case "kg>pnd":
document.getElementById(ConvertTo).value(this.value*2.2046).toFixed(1);
break;
// other case follow this form
}
}
}
就转换的价值而言,我建议在每个转换率的开关线上使用某些东西