clips 前端 js 倒计时 获取验证码的按钮

 

 1 <a href="javascript:void(0);" onclick="get_captcha()" class="btn btn-default btn6" id="for_captcha" >获取验证码</a>
 2 
 3 <script type="text/javascript">
 4  
 5 var url="/get-verify-code?phone_number=";
 6 var i;
 7           
 8 function count_down(){
 9       i=i-1;
10       $('#for_captcha').attr('disabled','disabled');
11       $('#for_captcha').html('剩余'+i+'秒..');
12       if(i<=0){
13       $('#for_captcha').removeAttr('disabled','disabled');
14       $('#for_captcha').html('获取验证码');
15                 window.clearTimeout(countdown);
16        }
17        else{
18                 var countdown=setTimeout('count_down()',1000);
19        }              
20 }
21 
22 function get_captcha(){
23     var phone= $('#phone').val();//console.log(phone);
24     url=url+phone;              
25 
26      re= /^1\d{10}$/;            
27      if (re.test(phone)) {
28              $.post(url,function(data){
29                     console.log(date);
30              }).complete(function(){
31                     console.log('complete');
32              });
33 
34              i=60;
35              count_down();
36       }
37       else {
38              alert("手机号码不正确");
39              return false;
40       }
41 
42  }
43 </script>
var btn_el = $(this);
var wait = 5;
btn_el.css('background-color','#aaa');
btn_el.text('再次获取'+wait+'...');
btn_el.prop('disabled',true);
var temp = setInterval(function(){
    wait--;
    btn_el.text('再次获取'+wait+'...');
    if(wait == 0){
        window.clearInterval(temp);
        btn_el.css('background-color','#f14658');
        btn_el.text('获取验证码');
        btn_el.prop('disabled',false);
    }
}, 1000);

 

note:

   项目使用了bootstrap,当我写这个脚本的时候,我发现一个很诡异的现象,在点击获取按钮的一瞬间按钮消失了

   firefox和chrome浏览器里都有那么一瞬间,但是只要稍微触碰任意一下页面元素甚至只是在f12换一个元素审查,

        一切正常了

   我发现当禁用后的position 变成了relative,而正常情况下一直是static状态 但问题不在这里 原因是bootstrap的预定义样式

  btn btn-default 在一瞬间应用优先权重超过了我定义的 其中一项background-color:white造成了覆盖和按钮消失的错觉,这本是不应发生的。

     因为触碰任意页面一个元素,浏览器又会重新计算,从而应用我的定义样式

  暂仍未找到他覆盖我样式的直接原因,目前先用 background-color:#218e23 !important;解决此问题。

2015-11-11 编辑补充两点

 对于disabled 之类的dom元素属性 不应该使用attr()方法操作 而应该换用jquery1.6+ 的prop()

对于dom属性具有相关类似true or false 属性的操作,应该使用prop 操作 ,否则会出现一些浏览器会发生仍然响应或者拿到不对的值的问题

To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method. 

覆盖我之前的样式现已知,是因为:focus :active 等伪类的状态造成的
posted @ 2015-06-16 19:25  wifix  阅读(424)  评论(0编辑  收藏  举报