代码之家  ›  专栏  ›  技术社区  ›  Ben

抑制JavaScript未定义错误?

  •  1
  • Ben  · 技术社区  · 14 年前

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

    更新:

    更多的背景信息。我已经建立了一个网站,用户可以提交图片和另一方的图片是可以选择他们的前3个图像。所以每张图片都有三个单选按钮。这里的困难在于必须控制单选按钮的尺寸(水平和垂直),因为提交的图像只能位于位置1、2或3。这是我的工作代码。但是增加了很多 if(!var == undefined)

    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;
                }
            }
        }   
    }
    
    2 回复  |  直到 13 年前
        1
  •  5
  •   Daniel Vassallo    14 年前

    你可以很容易地测试 null undefined JavaScript中的值,因为这两个值都是错误的:

    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 异常,这可能会使代码更难调试。

        2
  •  0
  •   Phaenotyp    14 年前