《Head First HTML5 javascript》第11章 查bug

2022.11.29 第11章 查bug

前端也有自己的 Debug,如 console.log,confirm,alert,Breakpoint 等。

alert(),confirm(),虽然也可以起到调试的作用,但是它适合传达信息的场景就是有限的,因为它会使甚至关闭窗口这样的操作无效化。而且 alert 的样式也依赖于浏览器的默认样式,并且只能显示文本,不适合自定义。总的来说就是阻塞页面加载,降低网页的性能与质量。

  1. firefox

    内置缺陷检测firebug

  2. 常见的错误

    1. 变量未定义
    2. 语法错误
    3. 字符串
    4. 符号&一致性
    5. 未加转义符
    6. 函数未定义
    7. 赋值与相等
  3. 提示不一定准确

其他知识点

HTML元素的ID和Name属性的区别

显然这些用途都不是能简单的使用ID来代替掉的,所以HTML元素的ID和Name的却别并不是身份证号码和姓名这样的区别,它们更本就是不同作用的东西。

<input name= "xx ">      //会提交数据
<input id= "xx ">       //不会提交数据

<input id= "xx " name= "yy ">
<label for= "xx "> Label </label>    //这里的for属性必须是指向一个id,否则没效果

<input name= "xx " type= "radio " value= "1 ">
<input name= "xx " type= "radio " value= "2 ">
<input name= "xx " type= "radio " value= "3 ">
/*这里必须name相同才能成为一组单选按钮,而id则没有这个功能。*/

<input name= "xx ">       //对应脚本document.getElementsByName( "xx ")[0]
<input id= "xx ">         //对应脚本document.getElementByIdx_x( "xx ")
  1. ID就像是一个人的身份证号码,它就是Client端HTML元素的Identity。
  2. Name有很多种的用途,所以它并不能完全由ID来代替,具体用途有:
    1. 作为可与服务器交互数据的HTML元素的服务器端的标示,比如input、select、textarea、和button等。我们可以在服务器端根据其Name通过Request.Params取得元素提交的值。

    2. HTML元素Input type='radio'分组,我们知道radio button控件在同一个分组类,check操作是mutex的,同一时间只能选中一个radio,这个分组就是根据相同的Name属性来实现的。

    3. 建立页面中的锚点,我们知道<a href="URL">link</a>是获得一个页面超级链接,如果不用href属性,而改用Name我们就获得了一个页面锚点。

      <a name="PageBottom"></a>
      
    4. 作为对象的Identity,如Applet、Object、Embed等元素。比如在Applet对象实例中,我们将使用其Name来引用该对象。

    5. 在IMG元素和MAP元素之间关联的时候,如果要定义IMG的热点区域,需要使用其属性usemap,使usemap="#name"(被关联的MAP元素的Name)。

    6. 某些特定元素的属性,如attribute,meta和param。

      /* 为Object定义参数 */
      <PARAM NAME = "appletParameter" VALUE = "value">
      /* Meta中 */
      <META NAME = "Author" CONTENT = "Dave Raggett">
      

案例:一个简单调试组件

<!DOCTYPE html>
<html>
    <head>
        <title>debug test</title>
        <script>
						function DebugConsole(){
						    var consoleElem = document.createElement("div");
						    consoleElem.id = "debug";
						    consoleElem.style.fontFamily = "monospace";
						    consoleElem.style.color = "#333333";
						
						    document.body.appendChild(consoleElem);
						    consoleElem.appendChild(document.createElement("hr"));
						    this.shaded = false;
						}
						
						DebugConsole.prototype.displayMsg = function(msg){
						    var msgElement = document.createElement("div");
						    msgElement.appendChild(document.createTextNode(msg));
						    msgElement.style.backgroundColor = this.shaded ?"#eeeeee" : "#ffffff";
						    var consoleElem = document.getElementById("debug");
						    consoleElem.appendChild(msgElement);
						    this.shaded = !this.shaded;
						}
         
            var callNum = 0;
            function checkWinner(form,caller,winningNum){
    
                console.displayMsg("callNum:" + callNum);
                ++callNum;
    
                if (callNum == winningNum){
                    alert(caller + ",cakker number" + callNum + "...today\\'s winner!");
                    form.submit();
                }
                else{
                    var callerField = document.getElementById('caller');
                    callerField.value = "next caller";
                    callerField.focus();
                    callerField.select();
                }
            }
        </script>
       
    </head>

    <body onload="console = new DebugConsole();">
        <form name="callform" action="radiocall.php" method="post">
            <img src="cube.png" >
            caller name:<input id="caller" type="text">
            <input type="button" value="call" onclick="checkWinner(this.form,document.getElementById('caller').value,7)">
        </form>
    </body>

</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值