六天学习问题总结

最近写代码时遇到的一些问题总结

1. input与button不够了解导致出现jsDOM操作出现闪现闪无

没修改之前的html代码

<form id="excel">
  <div class="dd">时间:<input id="time"/></div>
  <div class="dd">事件:<input id="title"/></div>
<div class="dd">内容:<input class="title1"/></div>
<button  class='className' id="save">保存</button>
<button  class='className' type="reset" id="clear">清除</button>
</form>

修改后的html代码

<form id="excel">
        <div class="dd">时间:<input id="time"/></div>
        <div class="dd">事件:<input id="title"/></div>
        <div class="dd">内容:<input class="title1"/></div>
        <input type="button" class='className' id="save" value="保存">
        <button  class='className' type="reset" id="clear">清除</button>
    </form>

js代码

var save=document.getElementById("save");
    save.onclick=function () {
        var time=document.getElementById("time");
        var title=document.getElementById("title");
        var time_txt=time.value;
        var title_txt=title.value;
        if(time.value.length==0) {
            alert("时间不能为空!");
            time.style.border="1px solid red";//时间框变红
        }else{
            if(title.value.length==0) {
                alert("题目不能为空!");
                title.style.border="1px solid red";//题目框变红
            } else{
                time.style.border="1px solid #3c82c0";//时间框恢复
                title.style.border="1px solid #3c82c0";//题目框恢复

                var tbody=document.getElementById("list").lastChild;//获取table
                var new_tr=document.createElement("tr");//创建tr

                //获取时间
                var new_td1=document.createElement("td");
                new_td1.innerText=time_txt;
                new_tr.appendChild(new_td1);

                //获取题目
                var new_td2=document.createElement("td");
                new_td2.innerText=title_txt;
                new_tr.appendChild(new_td2);
                tbody.appendChild(new_tr);
            }
        }
    };

-原因分析

button标签放到了form标签中,点击这个button变成了提交,相当于<input type="submit"/> 这样就相当于把内容提交,因此才会出现闪现闪无

关于button与input的区别

  • <button><input>
    规范中指名:可以用<button><input>来做表单按扭。不同的按钮类型请参考这些元素的详细定义。要注意的是<button><input>支持更丰富的表现功能。

    • 在button元素内部,您可以放置内容,比如文本或图像。这是该元素与使用input元素创建的按钮之间的不同之处。
    • <button></button>标签之间的所有内容都是按钮的内容,其中包括任何可接受的正文内容,比如文本或多媒体内容。唯一禁止使用的元素是图像映射,因为它对鼠标和键盘敏感的动作会干扰表单按钮的行为。始终为按钮规定type属性。
  • <input>用法:<input type="submit" value="OK" />
    <button>用法:<button>清除</button>

注意事项

在使用<button>标签时很容易想当然的当成<input type="button">使用,这很容易产生以下几点错误用法:

  1. 通过$(‘#customBtn’).val()获取<button id="customBtn"value="test">按钮</button>value的值
    在IE(IE内核)下这样用到得的是值是“按钮”,而不是“test”,非IE下得到的是“test”。参加上面标红的第一句话。
    这一点要和<input type="button">区分开。
    通过这两种方式 $(‘#customBtn’).val() , $(‘#customBtn’).attr(‘value’)在不同浏览器的获得值,如下:

    Browser/Value$(‘#customBtn’).val()$(‘#customBtn’).attr(‘value’)
    Firefox13.0testtest
    Chrome15.0 test test
    Opera11.61test test
    Safari5.1.4 test test
    IE9.0按钮 按钮

2.把<button>标签放到了<form>标签中,点击这个button变成了提交,相当于<input type="submit"/>,因此,不要把<button>标签当成<form>中的input元素。这个就是我出现这个问题的原因

以上总结有参考http://www.cnblogs.com/purediy/archive/2012/06/10/2544184.html

2. onclick属性使用时的对象应为元素节点

HTML 元素

  • HTML 元素以开始标签起始
  • HTML 元素以结束标签终止
  • 元素的内容是开始标签与结束标签之间的内容
  • 某些 HTML 元素具有空内容(empty content)
  • 空元素在开始标签中进行关闭(以开始标签的结束而结束)
  • 大多数 HTML 元素可拥有属性

DOM 节点


  • 文档本身是文档节点
  • 所有 HTML 元素是元素节点
  • 所有 HTML 属性是属性节点
  • HTML 元素内的文本是文本节点
  • 注释是注释节点

所以,一切 <input />之类的标签都不是元素或节点。

3. js操作弹出层效果弹出层内的onclick操作提示 Uncaught TypeError: Cannot set property ‘onclick’ of null

当出现以下错误:”……is not defined”、”Uncaught TypeError: Cannot set property ‘innerHTML’ of null”、”document.getElementById(“Clock”) is null” 时,说明出现问题的原因是一样的——js文件中调用了html中的对象,并且js在这个调用的对象之前加载了。

一般的解决方法是把js写在window.οnlοad=function(){}内,加载完HTML后再加载js

原来的js代码

    function openNew(){
//获取页面的高度和宽度
var sWidth=document.documentElement.scrollWidth;
var sHeight=document.documentElement.scrollHeight;

//获取页面的可视区域高度和宽度
var wHeight=document.documentElement.clientHeight; // 获取页面可视区域的高度
var wWidth=document.documentElement.clientWidth;

var oLogin=document.createElement("div");
oLogin.id="log_in";
var mask=document.createElement("div");
mask.id="mask";
oLogin.innerHTML="<div class='panel panel-primary'><div class='panel-heading'><div class='panel-title'>login</div></div><div class='panel-body'><div class='row'><div class='col-md-12'><form class='form-horizontal' role='form' ><div class='form-group'><label  class='col-md-2 control-label'>账户</label><div class='col-md-9'><input id='name' class='form-control' ></div></div><div class='form-group'><label  class='col-md-2 control-label'>密码</label><div class='col-md-9'><input type='password' class='form-control' id='psw'></div></div><div class='form-group'><div class='col-md-offset-2 col-md-10'></div></div><div class='form-group'><div class='col-md-offset-3 col-md-9'><a class='btn btn-default' id='lin'>登录</a><button class='btn btn-default col-md-offset-3' id='sl'>取消</button></div></div></form></div></div></div></div>";
document.body.appendChild(oLogin);//插入创建的登陆框
document.body.appendChild(mask);

//获取登陆框的宽和高
var dHeight= oLogin.offsetHeight  ;   // 获取登陆框的高度
var dWidth= oLogin.offsetWidth;  // 获取登陆框的宽度
//设置登陆框的left和top
oLogin.style.left=wWidth/2-dWidth/2+"px";
oLogin.style.top= wHeight/2-dHeight/2+"px";  //设置登陆框top值
//设置mask的长宽
mask.style.width=sWidth+"px";
mask.style.height=sHeight+"px";
var sl=document.getElementById("sl");
sl.onclick=mask.onclick=function()
{
document.body.removeChild(oLogin);
document.body.removeChild(mask);
};
}
> function Login(){
var login=document.getElementById("lin");
//点击登录页面内的登录
login.onclick=function()
{
var name=document.getElementById("name").value;
var psw=document.getElementById("psw").value;
var re1=/^[\u4e00-\u9fa5]{2}$/;
var re2=/^[\d\w]{6,12}$/;
if (!re1.test(name)){
alert("账户必须大于或等于两个汉字!")
}
if (!re2.test(psw)){
alert("密码必须六位以上且只能是数字字母下划线!")
}
else if( re1.test(name)&&re2.test(psw)){
document.body.removeChild(oLogin);
document.body.removeChild(mask);
}
};
}

修改后的js代码

function openNew(){
//获取页面的高度和宽度
var sWidth=document.documentElement.scrollWidth;
var sHeight=document.documentElement.scrollHeight;

//获取页面的可视区域高度和宽度
var wHeight=document.documentElement.clientHeight;     // 获取页面可视区域的高度
var wWidth=document.documentElement.clientWidth;

var oLogin=document.createElement("div");
oLogin.id="log_in";
var mask=document.createElement("div");
mask.id="mask";
oLogin.innerHTML="<div class='panel panel-primary'><div class='panel-heading'><div class='panel-title'>login</div></div><div class='panel-body'><div class='row'><div class='col-md-12'><form class='form-horizontal' role='form' ><div class='form-group'><label  class='col-md-2 control-label'>账户</label><div class='col-md-9'><input id='name' class='form-control' ></div></div><div class='form-group'><label  class='col-md-2 control-label'>密码</label><div class='col-md-9'><input type='password' class='form-control' id='psw'></div></div><div class='form-group'><div class='col-md-offset-2 col-md-10'></div></div><div class='form-group'><div class='col-md-offset-3 col-md-9'><a class='btn btn-default' id='lin'>登录</a><button class='btn btn-default col-md-offset-3' id='sl'>取消</button></div></div></form></div></div></div></div>";
document.body.appendChild(oLogin);//插入创建的登陆框
document.body.appendChild(mask);

//获取登陆框的宽和高
var dHeight= oLogin.offsetHeight  ;   // 获取登陆框的高度
var dWidth= oLogin.offsetWidth;      // 获取登陆框的宽度
//设置登陆框的left和top
oLogin.style.left=wWidth/2-dWidth/2+"px";
oLogin.style.top= wHeight/2-dHeight/2+"px";  //设置登陆框top值
//设置mask的长宽
mask.style.width=sWidth+"px";
mask.style.height=sHeight+"px";
var sl=document.getElementById("sl");
sl.onclick=mask.onclick=function()
{
    document.body.removeChild(oLogin);
    document.body.removeChild(mask);
};

> var login=document.getElementById("lin");
//点击登录页面内的登录
login.onclick=function()
{
var name=document.getElementById("name").value;
var psw=document.getElementById("psw").value;
var re1=/^[\u4e00-\u9fa5]{2}$/;
var re2=/^[\d\w]{6,12}$/;
if (!re1.test(name)){
alert("账户必须大于或等于两个汉字!")
}
if (!re2.test(psw)){
alert("密码必须六位以上且只能是数字字母下划线!")
}
else if( re1.test(name)&&re2.test(psw)){
document.body.removeChild(oLogin);
document.body.removeChild(mask);
}
};
}

以上引用部分是不一样的,弹出层内的事件或操作应该与弹出层的js写在一起,只有这样下面的函数调用弹出层的html时,才能找到对象,否则js时间或属性会提示Uncaught TypeError: Cannot set property ‘onclick’ of null

以上就是近期的心得总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值