我有以下函数,它假设从表单中的字段中获取值,并在调用时将其分配给隐藏字段。由于某种原因它不起作用,我不能给你更多的细节,为什么它不工作只是因为JavaScript并没有真正告诉你很多错误。
function clickChange(stype){
if(stype == '1'){
var fValue = document.getElementById('checkB1').value;
if(fCatValue == 0){
fCatValue = fValue;
}else{
fCatValue = 0;
}
document.getElementById('cat_1').value = fCatValue;
}elseif(stype == '2'){
var sValue = document.getElementById('checkB2').value;
if(sCatValue == 0){
sCatValue = sValue;
}else{
sCatValue = 0;
}
document.getElementById('cat_2').value = sCatValue;
}
}
答案 0 :(得分:2)
您需要将值转换为整数,或将它们视为字符串:
或者:
var fValue = parseInt(document.getElementById('checkB1').value)
if(fCatValue == 0){....
或
var fValue = document.getElementById('checkB1').value;
if(fCatValue =='0'){...
答案 1 :(得分:1)
由于你的变量sCatValue的声明的位置,看起来sCatValue超出了范围(或者根本没有声明)。如果宣布你的全部内容,你可能会更容易函数开头的函数范围变量,并减少嵌套if语句的数量。
我还建议你使用self explanatory variable names来减少自己的困惑。此外,我建议使用像firebug这样的javascript调试器或者内置的9个调试器来浏览代码。 (我知道很惊讶)。并使用 jshint来帮助解决常见规则。
我发现了一些其他的错误并清理了一些东西,这就是我得到的
function clickChange(stype) {
//declared at the start so no scope undefined issues
var sValue = document.getElementById('checkB2').value;
var fValue = document.getElementById('checkB1').value;
//changed the comparision op from == to ===
//in javascript '===' throws false if the types compared are not the
//same otherwise it attemps to preform implicit casting for you
if (stype === '1') {
//parsing to insure that the types are matching
//the 10 is a radix param. It insures your number is formatted as a decimal
if (parseInt(fCatValue,10)=== 0) {
fCatValue = fValue;
} else {
fCatValue = 0;
}
document.getElementById('cat_1').value = fCatValue;
} else if (stype === '2') {
if (parseInt(sCatValue,10)=== 0) {
sCatValue = sValue;
} else {
sCatValue = 0;
}
document.getElementById('cat_2').value = sCatValue;
}
}