如何使这个简单的Try / Catch测试工作?

时间:2015-02-24 14:05:40

标签: javascript radio-button try-catch

用户使用单选按钮选择是否运行带有错误的警报行代码。想法是用户选择一个无线电元素,运行一个函数(setError())来定位所选的单选按钮,然后将该值传递给另一个函数(runCode()),该函数使用IF语句来决定是否包含错误在警报中。如果用户选择警告并显示错误,则Try Catch代码应捕获错误并在HTML中已经

元素中显示错误。

<form name="Form">
       Run Code:
    <input type="radio" name="errorRad" onchange="setError()" value="yes">With Error
    <input type="radio" name="errorRad" onchange="setError()" value="no">Without Error
    </form>
        <p id="t">
        </p>

脚本:

<script>


function setError() {
    var x;
 var rad = document.forms["Form"]["errorRad"];
    for (i = 0; i < rad.length; i++) {
    if (rad[i].checked){
    x = rad[i].value;
    }
    }
   runCode(x);

    }
       function runCode(error) {
   if (error == "yes") {
    try {
    allert(a successful alert box);
    } catch(err) {
    document.getElementById("t").innerHTML = err.message;
    }
    }else if (error == "no") {
    alert("a successful alert box");
    }

    }

</script>

有趣的是,在测试之后,通过在代码中放置随机警报框来测试代码在破坏之前到达的位置:代码甚至似乎都没有调用第一个函数(setError)。 onchange事件似乎无法正常工作。也许通过语法错误或替代事件更好。另一个感兴趣的点是调用第二个函数(runCode)。我不太擅长在JavaScript中传递参数(我不太擅长)并且我不确定我的方法是否有效。

JS小提琴:http://jsfiddle.net/rwowf5j8/22/

2 个答案:

答案 0 :(得分:0)

试试这个

var rad = document.forms["Form"]["errorRad"];

for (var i = 0; i < rad.length; i++) {
    rad[i].addEventListener('change', onChange);
}

function onChange(event) {
    //cast as bool
    if (!!event.target.value) {
        try {
            allert('a successful alert box');
        } catch(err) {
            document.getElementById("t").innerHTML = err.message;
        }
    } else {
        alert('a successful text box');   
    }
}

你的代码有一些问题,allert会抛出一个undefined不是函数错误,但是传入a successful alert box而不是字符串会阻止代码运行

小提琴 - http://jsfiddle.net/rwowf5j8/24/

答案 1 :(得分:0)

我稍微更改了您的代码,并使用 allert 删除了您的错误...

alert("a successful alert box");

http://jsfiddle.net/f3b5kxx3/

但其余的都很好。