抑制JavaScript未定义的错误?

时间:2010-11-04 21:47:37

标签: javascript

我编写了一个脚本,用于检查要检查的一组radiobuttons。但由于不同的可能性,不同的单选按钮将显示出来。当弹出undefined/getElementById为空时,有没有办法抑制JavaScript错误?类似于@ - char在PHP中做什么?

更新

更多背景信息。我已经创建了一个网站,用户可以在其中提交图像,而另一方的图像可以选择其前三个图像。所以每个图像都有三个radiobuttons。这里的困难在于无线电按钮必须受到尺寸(水平和垂直)的控制,因为提交的图像可能只在1,2或3处。这是我的工作代码。但添加许多if(!var == undefined)并不能使代码更漂亮。因此,我想知道@suppressMe是否有可能?

function HandleRadioButtons(id, type, idString, img)
{
    var idArray = idString.split("|");  
    var place1  = document.getElementById("G_" + id);
    var place2  = document.getElementById("S_" + id);
    var place3  = document.getElementById("B_" + id);
    var img1    = document.getElementById("Winner1");
    var img2    = document.getElementById("Winner2");
    var img3    = document.getElementById("Winner3");    

    switch(type)
    {
        case "G" :
            place2.checked = false;
            place2.disabled = true;
            place3.checked = false;
            place3.disabled = true;
            img1.style.background = 'url(' + img + ') no-repeat center center #FFF';
            break;
        case "S" :
            place1.checked = false;
            place1.disabled = true;
            place3.checked = false;
            place3.disabled = true;
            img2.style.background = 'url(' + img + ') no-repeat center center #FFF';
            break;
        case "B" :
            place1.checked = false;
            place1.disabled = true;
            place2.checked = false;
            place2.disabled = true;
            img3.style.background = 'url(' + img + ') no-repeat center center #FFF';
            break;
    }     

    var current1, current2, current3 = "";

    for(i = 0; i < idArray.length - 1; i++)
    {
        var place1 = document.getElementById("G_" + idArray[i]);
        var place2 = document.getElementById("S_" + idArray[i]);
        var place3 = document.getElementById("B_" + idArray[i]);

        if(place1.checked == true)
        {
            var current1 = idArray[i];            
        }

        if(place2.checked == true)
        {
            var current2 = idArray[i];            
        }

        if(place3.checked == true)
        {
            var current3 = idArray[i];            
        }
    }

    for(i = 0; i < idArray.length - 1; i++)
    {        
        var place1 = document.getElementById("G_" + idArray[i]);
        var place2 = document.getElementById("S_" + idArray[i]);
        var place3 = document.getElementById("B_" + idArray[i]);

        if(idArray[i] != id && idArray[i] != current1 && idArray[i] != current2 && idArray[i] != current3)
        {
            switch(type)
            {
                case "G" :
                    place1.disabled = false;
                    place2.disabled = false;
                    place3.disabled = false;
                    break;
                case "S" :
                    place1.disabled = false;
                    place2.disabled = false;
                    place3.disabled = false;
                    break;
                case "B" :
                    place1.disabled = false;
                    place2.disabled = false;
                    place3.disabled = false;
                    break;
            }
        }
    }   
}

3 个答案:

答案 0 :(得分:5)

您可以轻松地在JavaScript中测试nullundefined值,因为这两个值都是假的:

var element = document.getElementById('some-id');
if (element) {
   element.value = 'Hello';
}

您还可以考虑使用try/catch块:

try {
   var element = document.getElementById('some-id');
   element.value = 'Hello';

   // ... the rest of your code here.
}
catch (e) {
   if (!(e instanceof TypeError)) {
      // The exception is not a TypeError, so throw it again.
      throw e;
   }
}

但请注意,上述操作会抑制所有TypeError异常,这可能会使您的代码更难调试。

答案 1 :(得分:0)

您可以通过getElementById检查按钮是否存在,然后检查其长度。你在使用任何框架吗?

答案 2 :(得分:0)

试试这个

var element = document.getElementById('some-id');
element?.value = 'Hello';