zoukankan      html  css  js  c++  java
  • Uncaught RangeError: Maximum call stack size exceeded

    控制台报这个错误可能是由于多种原因,但大多是因为js编写有错误。

    这个错误的字面意思是:

    • 代码运行时发生了异常,但是没有将其捕获(Uncaught)
    • RangeError是一个特定的异常类,面向对象中都有捕获异常的机制,当然也有一系列的类是异常类,用来定义各种异常
    • Maximum call stack size exceeded 是说,当前程序可能发生了比较频繁的递归操作,而系统可供递归操作调用的内存空间是有限制的,当前操作超出了这个限制,因此发生了异常

    当前的案例需求是这样:

    一个注册表单,要实现:

    • 当鼠标点击文本框时,框内的文字上移,文本框获取焦点,可供用户输入
    • 当点击文本框以外时,文字位置下移恢复,文本框失去焦点

    HTML代码是这样:

    <div class="form_group">
        <input type="text" name="mobile" autocomplete="off" id="register_mobile" class="phone_input">
        <div class="input_tip">手机号</div>
        <div id="register-mobile-err" class="error_tip">手机号不能为空</div>
    </div>
    

    javascript代码是这样:(页面提前导入了jquery-1.12.4.min.js)

    $('.form_group').on('click focusin',function(){
        $(this).children('.input_tip').animate({'top':-2, 'font-size':10}, 'fast').siblings('input').focus().parent().addClass('hotline');
    });
    

    这样出来的效果是这样:

    image

    这段js代码的意思大体是这样:

    • $('.form_group')获取了classform_group的div对象,然后编写了它的点击方法
    • $(this).children('.input_tip')获取了classinput_tip的div对象
    • .animate({'top':-2, 'font-size':10}, 'fast')input_tip添加了上移的动画
    • .siblings意为兄弟姐妹,即为所有与input_tip平级的元素,其中包括input标签,.siblings('input').focus,就是文本框获取了焦点,光标在里面闪啊闪
    • 最后.parent().addClass('hotline')是获取了文本框的,也就是divform_group。然后给它添加了css属性hotline,也就是文本框下面的那一道蓝色的线

    现在的效果不仅会报错,而且是不符合预期的,鼠标点击文本框外的位置,文字位置不会恢复

    修改后的js是这样:

    $('.form_group').children('.input_tip').on('click focusin',function(){
        $(this).animate({'top':-2, 'font-size':10}, 'fast').siblings('input').focus().parent().addClass('hotline');
    });
    

    出来的效果是这样:

    image

    现在 Chrome 控制台不报错了

    但是仔细测试发现,这样还是有轻微的bug:

    image

    • 如果点击字,则效果正常
    • 如果点击文本框中字以外的地方,则发现字不会上移,输入内容后会与提示文字重合
    • 当点击一个文本框时,按tab键,焦点会到下一个文本框,但是文字不会上移

    所以实质上是又发生了新的问题^_^

  • 相关阅读:
    Redis_数据类型
    python 单独设置在plot每条线的label为中文
    制作9patch图片心得——Android开发使用类似QQ聊天的冒泡对话框
    Oracle数据库实验一建立数据库
    Postman使用总结
    jmeter使用小结
    python实现系统调用cmd命令的模块---subprocess模块
    程序进程线程之间的区别
    Fiddler抓包工具简介
    MySQL基础SQL命令---增删改查
  • 原文地址:https://www.cnblogs.com/junsircoding/p/15664902.html
Copyright © 2011-2022 走看看